5

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

你好我有点困惑

char *func()
 {

    return "Hello";
 }

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

4

4 回答 4

10

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

  • 6.4.5 字符串文字

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

  • 6.2.4 对象的存储期限

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

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

于 2012-08-27T09:08:09.190 回答
1

它是恒定的,并且在内存中具有恒定的地址。

于 2012-08-27T09:05:25.607 回答
0

该函数仅在返回控件后才销毁这些值。

因此,当遇到 return 语句时,“Hello”被放置为返回值,然后函数破坏范围;

于 2012-08-27T09:08:37.507 回答
-1

看看这个:从函数返回字符串文字地址是否安全且可移植?

即使删除了字符串(使用 malloc() 和 free() 进行局部变量或动态分配),当您返回指针时,该值也可能是正确的。但是,这是一种未定义的行为。

于 2012-08-27T09:09:55.853 回答