我知道这是错的:
char* getSomething() {
char szLocal[5];
/* put something in the char array somehow */
return szLocal;
}
...因为szLocal可以在函数返回后的某个时间被销毁。
但这可以吗?
char* getSomethingElse() {
return "something else";
}
答案 0 :(得分:25)
实际上没问题。字符串文字通常分配在一个不可变的内存区域中,只要程序正在运行,该区域就可以使用。
答案 1 :(得分:7)
在分配方面没问题:字符串文字隐式static
。将非const
指针返回到文字是不行的。
如果要返回可修改的(非const
)字符串,请将其声明为static char[]
。或者更好的是,返回一份副本:
return strdup("something else");
之后不要忘记free
。 strdup
是非ISO,但几乎可以在任何地方使用(我相信MSVC除外)。
答案 2 :(得分:4)
字符串文字的类型是 (请参阅下面的评论)const char *
static char[]
,但是不可变。字符串文字表示静态分配内存的指针。因此:
返回一个这样的指针是完全没问题的。
你的函数返回类型必须应该与const char*
兼容,即返回类型char *
会给你至少一个警告以后可能会给你带来麻烦。
如果你的函数可以返回文字或malloc
字符串,你必须非常小心内存管理。 free
字符串文字可能会出现段错误。