int resp = recv(s, buf, len, flags);
if(resp == 18) {
char data[18];
strcpy(data, buf);
...
}
我希望 strlen(data) 等于 18,但事实并非如此。我错过了什么?
如果您data
包含一个 zero-byte \0
,那么strlen
只会给您字符串的长度,直到终止符。如果data
没有终止符,strlen
则将继续搜索它恰好位于的任何内存。这通常用于缓冲区溢出攻击。
我认为乔想说的是您的代码不是防弹的,从读取的字节数开始并将数据复制到数据数组中。
int resp = recv(s, buf, len, flags);
if(resp > 0)
{
// ! This code assumse that all the data will fit into 18 bytes.
char data[18];
memset(data, 0, sizeof(data));
// ! As Joe warned above, this code assumes there's a null terminating
// ! character in the buf you received.
strcpy(data, buf); // consider memcpy if binary data (i.e. not strings)
}