从函数返回char*的内容

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)

Joh*_*ica 6

是的,它是有效的.字符串文字"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)