gpt4 book ai didi

c - fprintf 结果不正确

转载 作者:行者123 更新时间:2023-11-30 20:19:21 35 4
gpt4 key购买 nike

在下面的代码中,我尝试从套接字读取并将结果存储在文件中。

实际发生的情况是,我的客户端向我的服务器发送了一个 file.html 的 GET 请求。我的服务器找到该文件并将其内容写入套接字。最后,我的客户端从 thread_fd 读取内容并重新创建文件。

由于某种原因,重新创建的文件的内容少于原始文件的内容。我发现问题出在最后缺少的一些行。当我在 while 循环中使用 printf("%s", buffer) 时,STDOUT 中的一切看起来都很好,但我的 fprintf 对于 81.000 字节大小的文件丢失了 3.000 字节。

#define MAXSIZE 1000

int bytes_read, thread_fd;
char buffer[MAXSIZE];
FILE* new_file;

memset(buffer, 0, MAXSIZE);
if((new_file = fopen(path, "wb+")) == NULL)
{
printf("can not open file \n");
exit(EXIT_FAILURE);
}
while ((bytes_read = read(thread_fd, buffer, MAXSIZE)) > 0)
{

fprintf(new_file, "%s", buffer);
if(bytes_read < MAXSIZE)
break;
memset(buffer, 0, MAXSIZE);
}

最佳答案

您从套接字读取二进制数据,该数据可能包含也可能不包含\0 字节。当您随后 fprintf 该数据时,fprintf 将在遇到的第一个\0 处停止。在您的情况下,完整文件少了 3000 字节。如果您的文件不包含\0 字节,则 fprintf 将继续打印 ram 内容,直到出现段错误。

使用 write() 将数据写回文件并检查是否有错误。不要忘记 close() 文件并检查是否有错误。

关于c - fprintf 结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584175/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com