C语言 返回指向文字(或常量)字符数组(字符串)的指针

l3zydbqr  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(73)

我知道这是错误的:

char* getSomething() {
    char szLocal[5];
    /* Put something in the char array somehow */
    return szLocal;
}

.因为 szLocal 可以在函数返回后的某个时间被销毁。
但是这样可以吗?

char* getSomethingElse() {
    return "something else";
}
bqjvbblv

bqjvbblv1#

其实没关系。字符串文字通常分配在一个不可变的内存区域中,只要程序运行,该区域就一直可用。
请参阅when does c/c++ allocate string literals的答案。

mrzz3bfm

mrzz3bfm2#

在分配方面是可以的:字符串字面量隐式地为static。返回一个非const的指针到一个文本是不行的。
如果你想返回一个可修改的(非const)字符串,声明它为static char[]。或者更好,返回一个副本:

return strdup("something else");

别忘了以后再做freestrdup是非ISO的,但几乎在任何地方都可以使用(除了MSVC,我相信)。

acruukt9

acruukt93#

字符串文字的类型是static char[],但不可变。字符串字面量表示指向静态分配内存的 * 指针 *。因此:
1.返回一个这样的指针是非常好的。
1.你的函数的返回类型应该与const char*兼容,也就是说,返回类型char *可能会给你带来给予麻烦。
1.如果你的函数可能同时返回一个文字或malloc艾德字符串,你必须非常小心内存管理。free ing a string literal probably will segmentation fault .

相关问题