当我使用read()
套接字从服务器检索字节时,我在字符中发现了一些意想不到的东西。
以下是我的代码:
Char buf[80];
Char output[80];
if ( (count = read(socket_d, buf, 80)) == -1) {
perror("Error on read call");
exit(1);
}
strcat(output, buf);
printf("Client read %d bytes\n", count);
while (count==80) {
memset(&buf, 0, sizeof(buf));
if ( (count = read(socket_d, buf, 80)) == -1) {
perror("Error on read call");
exit(1);
}
printf("Client read %d bytes\n", count);
strcat(output, buf);
}
/* print the received message */
printf("\n%s\n\n", output);
输出如下:
Client read 80 bytes
Client read 80 bytes
Client read 8 bytes
Your messages:
1:From User1, 04/21/16 02:12 AM, MSG1
2:From User2, 04/21/16 02:162 AM, MSG2
3:From User2, 04/21/16 02:12 AM, MSG3
4:From User1, 04/21/16 02:12 AM6, MSG4
期望输出应为:
Client read 80 bytes
Client read 80 bytes
Client read 8 bytes
Your messages:
1:From User1, 04/21/16 02:12 AM, MSG1
2:From User2, 04/21/16 02:12 AM, MSG2
3:From User2, 04/21/16 02:12 AM, MSG3
4:From User1, 04/21/16 02:12 AM, MSG4
似乎第二个循环中的char('6')
中显示了意外的buf[]
。
当我定义每次read()
套接字的大小时,所以我想循环读取,直到读取量小于limit_size
,然后输出。
在循环过程中我应该如何处理buf[]
以避免意外的字符?
答案 0 :(得分:0)
1- output
在
strcat(output, buf);
2- memset
想要一个指针而buf
已经(衰变成)一个指针
memset(&buf, 0, sizeof(buf));
应该是
memset(buf, 0, sizeof(buf));
3-如果count == 80
您的缓冲区中没有空格可用于NUL
,请将buf
声明为char buf[81];
(或read
79字节)并且忘记在\0
read()
结束字符串
buf[count] = '\0';