<分区>
const char *fun1()
{
const char *a = "hello";
return a;
}
const char *fun2()
{
const char a[] = "hello";
return a;
}
int main(int argc, char *argv[])
{
printf("%s\n", fun1());
printf("%s\n", fun2());
return 0;
}
输出:
cpp:12:12: warning: address of local variable 'a' returned [-Wreturn-local-addr]
12 | return a;
| ^
passwords.cpp:11:16: note: declared here
11 | const char a[] = "hello";
| ^
hello
(null)
这两种分配字符串的方法有什么区别? 我收到一个警告而不是另一个警告? 我知道当我们从函数返回时局部变量会被销毁,但为什么 fun1() 不是这种情况? 它是否在其他地方而不是堆栈获取内存?