我明白这是安全的......
const char *get_str_literal() {
return "I literally can't even";
}
但这是吗?
const char *get_str_literal() {
const char *str = "I literally can't even";
return str;
}
如果没有,为什么?
修改:以下剪辑与上面的第二个代码段有何不同?
const char *get_str_literal() {
const char str[] = "I literally can't even";
return str;
}
字符串文字的内容是否会被复制到自动数组存储中?会发生什么?
答案 0 :(得分:3)
在你的第二个例子中:
const char *get_str_literal() {
const char *str = "I literally can't even";
return str;
}
str
是一个指向字符串文字的指针,它具有静态存储持续时间。因此,当在调用函数中恢复执行时,返回的指针仍将指向某个东西,即字符串文字。
在你的最后一个例子中:
const char *get_str_literal() {
const char str[] = "I literally can't even";
return str;
}
字符数组str[]
是初始化,带有字符串文字。初始化后,str[]
是一个char
数组,包含字符串文字的字符,包括'\0'
终止符。在str
语句中遇到return
时,会将其转换为指向const char
的指针,该指针将返回到调用函数。但是,由于str[]
具有自动存储持续时间,因此它的生命周期将结束,指针将变为不确定,从而导致未定义的行为。