我知道这是错的:
char* getSomething() {
char szLocal[5];
/* put something in the char array somehow */
return szLocal;
}
Run Code Online (Sandbox Code Playgroud)
...因为szLocal可以在函数返回后的某个时候被销毁.
但这样可以吗?
char* getSomethingElse() {
return "something else";
}
Run Code Online (Sandbox Code Playgroud)
Rom*_*kov 25
那实际上没问题.字符串文字通常分配在不可变的内存区域中,只要程序正在运行,该区域仍然可用.
另请参阅c/c ++何时分配字符串文字的答案.
在分配方面没问题:字符串文字是隐含的static.将非const指针返回到文字是不正确的.
如果要返回可修改的(非const)字符串,请将其声明为a static char[].或者更好,返回一份副本:
return strdup("something else");
Run Code Online (Sandbox Code Playgroud)
不要忘记free事后.strdup是非ISO,但几乎可以在任何地方使用(除了MSVC,我相信).
字符串文字的类型是static char[],但不可变。字符串文字表示指向静态分配内存的指针。所以:
返回这样一个指针是完全可以的。
你的函数的返回类型应该与 兼容const char*,即返回类型char *可能会给你带来麻烦。