2013-08-04 35 views
0

我记得阅读关于使用这行代码的解释,但过去一周我已经阅读了很多关于套接字的书籍,我再也找不到它了。缓冲=“ 0”的目的是什么

我在书中千万记住,他们使用= \ 0写自己的代码,然后说这将是最好有它在1

我试图寻找,但没有运气,这是一块我读它是用来

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

我希望'buffer'至少26长... ...和代码应继续之前肯定检查'NREAD == -1'。 (或者说,在设置结束标记之前它不是-1) –

+0

@Borgleader在他们告诉我之前我不知道它叫什么,所以我无法正确搜索它。 – user2644360

回答

5

原来接收缓冲区为NUL终止的C字符串,您可以与strlen, strcpy, etc. 使用我想告诉你的代码的代码是用于说明目的只有,而不是生产代码,因为你没有检查recv的返回值,whic h可以是-1。如果发生这种情况,会导致内存损坏。

0

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

\ 0是空字符。

所以你没有得到像垃圾“这是我message.aG¤(Ag4h98av¤” G#¤”。试想有一个\ 0,在该字符串的结尾。

当与网络打交道,你通常希望发送像整数这样的数据,最常见的做法是以二进制形式发送它,而不是明文形式。一个整数可能看起来像“$%\ 0n”,例如4字节,但第三个是\ 0。所以你必须考虑到可以有一个\ 0,因此你不应该把数据的二进制表示存储为一个字符串,而应该存储为一个缓冲器/字符串流。打印出它的二进制表示,但你必须牢记在心。也许你想打印出来,谁知道。