我正在编写简单的服务器 - 客户端应用程序。在服务器端,我收到char数组(const const)。但是最后一个char数组可以有空字节。
我将收到的数组附加到循环文件中。这是代码:
char buffer[256];
/* ... */
FILE *file;
file = fopen(file_name,"ab+");
for (i = 0; i < parts; ++i) {
if ((length = recv(sockfd, buffer, 256, 0)) < 0) {
/* recv failed */
}
send(sockfd, "OK", 2, 0);
fwrite(buffer, 1, 256, file);
}
fclose(file);
例如: ... Quisque dignissim turpis sapien,非facilisis risus gravida at。的 \ 00 \ 00 \ 00 \ 00
有没有办法如何跳过最后的\ 0字符?或者我必须逐字节地复制最后一个数组。
答案 0 :(得分:2)
使用
fwrite(buffer, 1, length, file);
这只会写出您收到的字符数量。如果额外的\0
是数据包的一部分,它将被写入,否则不会。
如果您收到\0
个字符作为数据包的一部分,但您不想写它们,那么您必须这样做:
fwrite(buffer, 1, strlen(buffer), file);
答案 1 :(得分:0)
如果recv
函数的返回值是缓冲区中读取字节的长度,请使用fwrite
调用中的缓冲区大小