我记得阅读关于使用这行代码的解释,但过去一周我已经阅读了很多关于套接字的书籍,我再也找不到它了。缓冲=“ 0”的目的是什么
我在书中千万记住,他们使用= \ 0写自己的代码,然后说这将是最好有它在1
我试图寻找,但没有运气,这是一块我读它是用来
nread = recv(newsock, buffer, 25, 0);
buffer[nread] = '\0';
我记得阅读关于使用这行代码的解释,但过去一周我已经阅读了很多关于套接字的书籍,我再也找不到它了。缓冲=“ 0”的目的是什么
我在书中千万记住,他们使用= \ 0写自己的代码,然后说这将是最好有它在1
我试图寻找,但没有运气,这是一块我读它是用来
nread = recv(newsock, buffer, 25, 0);
buffer[nread] = '\0';
原来接收缓冲区为NUL终止的C字符串,您可以与strlen, strcpy, etc.
使用我想告诉你的代码的代码是用于说明目的只有,而不是生产代码,因为你没有检查recv的返回值,whic h可以是-1
。如果发生这种情况,会导致内存损坏。
这是表示字符串在该字节结束。在这种情况下是最后一个。
\ 0是空字符。
所以你没有得到像垃圾“这是我message.aG¤(Ag4h98av¤” G#¤”。试想有一个\ 0,在该字符串的结尾。
当与网络打交道,你通常希望发送像整数这样的数据,最常见的做法是以二进制形式发送它,而不是明文形式。一个整数可能看起来像“$%\ 0n”,例如4字节,但第三个是\ 0。所以你必须考虑到可以有一个\ 0,因此你不应该把数据的二进制表示存储为一个字符串,而应该存储为一个缓冲器/字符串流。打印出它的二进制表示,但你必须牢记在心。也许你想打印出来,谁知道。
这是C/C++空终止符,它表示字符数组中的内容结束。
我希望'buffer'至少26长... ...和代码应继续之前肯定检查'NREAD == -1'。 (或者说,在设置结束标记之前它不是-1) –
@Borgleader在他们告诉我之前我不知道它叫什么,所以我无法正确搜索它。 – user2644360