有这个代码
const char* get_msg(){
const char str[] = "get_msg";
return str;
}
#include <stdio.h>
int main(){
printf("%s\n", get_msg());
}
编译时,它会产生
警告:函数返回局部变量的地址 [-Wreturn-local-addr]
当然,应用程序在执行时会崩溃。我明白为什么会发生这种情况,因为字符串位于堆栈上,并且在函数返回值后被销毁。
但是,如果函数像这样重写
const char* get_msg(){
return "get_msg";
}
那既不存在,也不存在 Varningov 或 Falling。我对return "get_msg"; 的工作原理感兴趣;?原来这一行是在堆栈上的?或者在哪里?毕竟,从逻辑上讲,这一行应该在函数返回后“消失”。
我这样编译: gcc main.c -o main