0

我记得读过关于这行代码使用的解释,但是过去一周我读了太多关于套接字的书,以至于我再也找不到了。

我记得在书中,他们使用 =\0 编写代码,然后说最好将其设置为 1

我尝试搜索它,但没有运气,这是我正在阅读的一段代码

 nread = recv(newsock, buffer, 25, 0);
 buffer[nread] = '\0';
4

3 回答 3

5

它将接收到的缓冲区转换为以NUL 结尾的 C-string,您可以使用strlen, strcpy, etc.-1. 如果发生这种情况,将导致内存损坏。

于 2013-08-04T00:24:09.293 回答
2

这是 C/C++ 空终止符,指示字符数组中内容的结尾。

http://en.wikipedia.org/wiki/Null-terminated_string

于 2013-08-04T00:26:35.460 回答
0

它表示字符串在该字节处结束。在这种情况下是最后一个。

\0 是空字符。

所以你不会得到像 "This is my message.aG¤(Ag4h98av¤"G#¤" 这样的垃圾。想象一下那个字符串的末尾有一个 \0 。

在处理网络时,您通常希望发送整数等数据,最常见的做法是以二进制而不是明文形式发送。例如,一个整数可能看起来像 "$%\0n"。4 个字节,但第三个是 \0。所以你必须考虑到可以有一个\0。因此,您不应将数据的二进制表示形式存储为字符串,而应将其存储为缓冲区/字符串流。

当然,也许您不想打印出它的二进制表示。但是你必须记住它。也许你想打印出来,谁知道呢。

于 2013-08-04T00:24:54.593 回答