我正在用 c 编写简单的服务器/客户端,其中服务器临时存储来自客户端的消息并在客户端请求时检索它。
问题是当客户端从服务器接收消息时,缓冲区的行为有点奇怪。
我所做的只是读取从服务器接收的数据并将其打印在屏幕上,但不知何故缓冲区被覆盖的程度超过了缓冲区的最大大小
在客户端
while((byteRead = recv(ssock, buffer, MAXBUF, 0)) > 0)
{
if(byteRead <= 0)
break;
printf("%s", buffer);
}
其中 MAXBUF 是 256。它保留了一些垃圾,所以我检查了缓冲区中的字符串大小
令人惊讶的是
printf("%d READ vs %d buffer strlen \n", byteRead, strlen(buffer))
显示 byteRead 为 256,但缓冲区的字符串长度为 262。
任何想法??
P.s在服务器端,它正确读取文件并将其发送到套接字。
recv
不在字符串末尾放置空终止符(同时printf
%s
假设有一个)。
你必须使用byteRead
来确定字符串的长度。如果您想使用类似的函数,请添加一个空终止符printf
,但要确保您的缓冲区有足够的空间,即使在最大大小的读取中也是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)