pku*_*arn 3 c pointers return-value string-literals
最近遇到了以下代码,它声明了一个char*p,赋值如p ="GOOD"并返回return p.函数调用完成后返回值是否有效?
const char * get_state(int state)
{
char *p;
if (state) {
p = "GOOD";
}
else
{
p = "BAD";
}
return p;
}
Run Code Online (Sandbox Code Playgroud)
是的,它是有效的.字符串文字"GOOD"并"BAD"保证在永久的静态存储中,并且即使在get_state()返回后也将继续存在.
// Invalid
char str[] = "GOOD";
char *p = str;
return p;
// Valid
char *p = "GOOD";
return p;
Run Code Online (Sandbox Code Playgroud)