返回从函数分配的字符串文字的 const char * 是否安全?

kyl*_*art 2 c pointers c-strings

我知道这是安全的...

const char *get_str_literal() {
    return "I literally can't even";
}
Run Code Online (Sandbox Code Playgroud)

但这是吗?

const char *get_str_literal() {
    const char *str = "I literally can't even";
    return str;
}
Run Code Online (Sandbox Code Playgroud)

如果不是,为什么?

编辑:下面的代码片段与上面的第二个代码片段有何不同?

const char *get_str_literal() {
    const char str[] = "I literally can't even";
    return str;
}
Run Code Online (Sandbox Code Playgroud)

字符串文字的内容是否被复制到自动数组存储中?发生什么了?

ex *_*ilo 6

在你的第二个例子中:

const char *get_str_literal() {
    const char *str = "I literally can't even";
    return str;
}
Run Code Online (Sandbox Code Playgroud)

str是设置为指向字符串文字的指针,它具有静态存储持续时间。因此,当在调用函数中恢复执行时,返回的指针仍将指向某些内容,即字符串文字。

在你的最后一个例子中:

const char *get_str_literal() {
    const char str[] = "I literally can't even";
    return str;
}
Run Code Online (Sandbox Code Playgroud)

字符数组str[]初始化与字符串文字。初始化后,str[]是一个char包含字符串文字字符的s数组,包括'\0'终止符。当str在遇到return声明,将它转换成一个指针const char,它返回到调用函数。但是,由于str[]具有自动存储持续时间,它的生命周期将结束,指针将变得不确定,导致未定义的行为。