gpt4 book ai didi

char 数组与 char 指针

转载 作者:太空狗 更新时间:2023-10-29 17:14:40 24 4
gpt4 key购买 nike

当使用 recv 通过套接字接收数据时,我注意到,有:

char buffer[4];memset(buffer, 0, 4);recv(socket, buffer, 4, 0);

我收到了

mesgx��

“mesg”是我发送的内容,附加了一些随机字符。

如果我用

char * method = (char *) malloc(4);memset(buffer, 0, 4);recv(socket, buffer, 4, 0);

相反,我收到了

mesg

所以我的字符串中没有附加任何随机内容。我发现如果我改用 char[5] 它也能正常工作,但我不太明白为什么。 malloc(4) 真的分配了 5 个字节,第五个是 NUL 吗?

最佳答案

malloc(4) 的调用实际上只分配了四个字节。内存中的 下一个 字节恰好是一个 NUL,这只是一个巧合,它为您终止了您的字符串。

如果您在堆栈上分配了 char buffer[4],下一个字节恰好是一个 'x' 后跟一些其他东西,所以您的字符串一直持续到找到下一个 NUL 字节。

套接字函数只处理字节,不会将字节视为带有尾随 NUL 或任何额外内容的字符串。您得到的正是您所要求的。

关于char 数组与 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com