直接上代码
#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 1
字符串常量区啊
|
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 3
字符串字面量一般存储在 .rodata 区段,而用字符串字面量来初始化字符数组时,则会将其拷贝到栈,当然函数返回后栈帧被释放,所以你注释掉的那个返回值其实是一个 dangling pointer
|
6
akatquas 2020-08-25 17:57:05 +08:00 3
|