写入文件C时忽略\ 0个字符

时间:2014-01-04 15:36:49

标签: c arrays file fwrite

我正在编写简单的服务器 - 客户端应用程序。在服务器端,我收到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字符?或者我必须逐字节地复制最后一个数组。

2 个答案:

答案 0 :(得分:2)

使用

fwrite(buffer, 1, length, file);

这只会写出您收到的字符数量。如果额外的\0是数据包的一部分,它将被写入,否则不会。

如果您收到\0个字符作为数据包的一部分,但您不想写它们,那么您必须这样做:

fwrite(buffer, 1, strlen(buffer), file);

答案 1 :(得分:0)

如果recv函数的返回值是缓冲区中读取字节的长度,请使用fwrite调用中的缓冲区大小