
直接上代码
#include <stdio.h> char *test() { // char res[] = "hello, world"; // return res; return "hello, world"; } const char *tt() { const char *str = test(); printf("%s\n", str); return str; } int main() { const char *str = tt(); printf("%s\n", str); } 结果是打印了两次 hello world, 注释是两个乱码
所以, 请问 return “hello, world” 的这个存储 hello, world 的内存在什么地方
1 codehz 2020-08-25 14:23:59 +08:00 字符串常量区啊 |
3 junnplus 2020-08-25 14:32:48 +08:00 你给 char res 加一个 static 就可以了,放在静态区 |
4 CismonX 2020-08-25 14:33:57 +08:00 via iPhone 字符串字面量一般存储在 .rodata 区段,而用字符串字面量来初始化字符数组时,则会将其拷贝到栈,当然函数返回后栈帧被释放,所以你注释掉的那个返回值其实是一个 dangling pointer |
6 akatquas 2020-08-25 17:57:05 +08:00 |