可能重复:
Is returning a string literal address from a function safe and portable?
“life-time” of string literal in C
您好我有点困惑
char *func()
{
return "Hello";
}
这里“Hello”是字符序列/数组。它是一个局部变量,一旦函数返回它就必须消失。那我们怎么能得到正确的价值呢?
答案 0 :(得分:10)
"Hello"
是一个字符串文字,将在程序的生命周期内存在。引用C99标准的相关部分:
...然后使用多字节字符序列初始化静态存储持续时间的数组,并且长度足以包含序列...
一个对象,其标识符使用外部或内部链接声明,或者使用 存储类说明符static具有静态存储持续时间。它的一生就是整个 程序执行程序及其存储的值仅在程序之前初始化一次 启动。
函数的返回值应为const char*
,因为尝试修改字符串文字是未定义的行为。
答案 1 :(得分:1)
它是常量并且在内存中具有恒定的地址。
答案 2 :(得分:0)
该函数仅在返回控件后销毁值。
因此,在遇到return语句时,将“Hello”置于返回值,然后函数销毁范围; < / p>
答案 3 :(得分:-1)
看看这个:Is returning a string literal address from a function safe and portable?
即使删除了字符串(使用malloc()和free()进行局部变量或动态分配),当返回指针时,该值也可以是正确的。但是,这是一种不确定的行为。