C变量的范围

5 c heap scope local

可能重复:
从函数安全且可移植返回字符串文字地址?
C语言中字符串文字的"生命周期"

您好我有点困惑

char *func()
 {

    return "Hello";
 }
Run Code Online (Sandbox Code Playgroud)

这里"Hello"是字符序列/数组.它是一个局部变量,一旦函数返回它就必须消失.那我们怎么能得到正确的价值呢?

hmj*_*mjd 10

"Hello"是一个字符串文字,将在程序的生命周期中存在.引用C99标准的相关部分:

  • 6.4.5字符串文字

...然后,多字节字符序列用于初始化静态存储持续时间和长度的数组,足以包含序列...

  • 6.2.4对象的存储持续时间

标识符使用外部或内部链接声明的对象,或者使用存储类说明符static声明的对象具有静态存储持续时间.它的生命周期是程序的整个执行,它的存储值只在程序启动之前初始化一次.

函数的返回值应该是const char*尝试修改字符串文字是未定义的行为.