如何在C++中返回本地数组?

24
char *recvmsg(){
    char buffer[1024];
    return buffer;
}

int main(){
    char *reply = recvmsg();
    .....
}

我收到一个警告:

警告 C4172:返回局部变量或临时对象的地址


5
你应该选择 C 或者 C++,因为好的答案取决于你选择哪个。 - PlasmaHH
2
你是想要C++的答案还是只需要C的? - JoeG
1
哦,顺便说一下,void main 是错误的。 - PlasmaHH
2
如果你正在学习C++的教程使用了void main,那么它很可能是垃圾。我会推荐一本好的C++入门书籍 - R. Martinho Fernandes
如果在调用例程中仅将*recvmsg的返回值作为strcpy等函数的输入而不进行赋值操作,则可以忽略警告。 - Laurie Stearn
12个回答

0

你正在recvmsg函数内部在堆栈上分配数组。如果将指向该内存的指针作为返回值,那么当函数退出时,该内存将被清理,这将导致未定义的行为。

如果你想返回一个指向内存的指针,你需要使用malloc进行动态分配。


0
当您返回缓冲区时,它会作为指向数组第一个位置的指针,因此它将返回其地址。在调用函数的地方,您可以创建一个字符指针,它将存储此返回的地址值。之后,您可以移动指针并访问数组的所有元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接