buffer =“\ 0”的目的是什么

时间:2013-08-04 00:18:52

标签: c++ linux sockets

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

我记得在书中,他们用= \ 0写了代码,然后说最好把它放在1

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

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

3 个答案:

答案 0 :(得分:5)

它将接收到的缓冲区转换为 NUL终止的C字符串,可以与strlen, strcpy, etc.一起使用 我假设您显示的代码仅用于说明目的,而不是生产代码,因为您没有检查recv的返回值,可以是-1。如果发生这种情况,将导致内存损坏。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

\ 0是空字符。

所以你不会像“这是我的信息.aG¤(Ag4h98av¤”G#¤“)那样得到垃圾。想象一下该字符串末尾有一个\ 0。

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

当然,也许你不想打印出它的二进制表示。但你必须牢记这一点。也许你想打印出来,谁知道。

相关问题