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)
字符串文字的内容是否被复制到自动数组存储中?发生什么了?
在你的第二个例子中:
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[]具有自动存储持续时间,它的生命周期将结束,指针将变得不确定,导致未定义的行为。