fre*_*oma 6 c malloc c-strings memset
当使用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吗?
Gre*_*ill 16
调用malloc(4)真的只分配了四个字节.只是巧合,内存中的下一个字节恰好是NUL,它终止了你的字符串.
在你char buffer[4]在堆栈上分配的情况下,下一个字节恰好是'x'其他一些东西,所以你的字符串只是继续,直到找到下一个NUL字节.
套接字函数仅处理字节,并且不将字节视为具有尾随NUL的字符串或任何额外的字符串.你得到了你所要求的.