使用 fread 读取图像会在缓冲区中添加 \0

Reading an image with fread adds \0 in buffer

我在 HTTP 中有一个客户端和一个服务器,客户端向服务器发送文件,服务器将文件发回客户端。

我向服务器发送文件没有问题,但是当服务器发回需要分多段发送的大文件(例如图像)时,每次我 fread 进入我的缓冲区时,缓冲区在某处收到 [=12=],因此客户端收到损坏的文件。

这是将文件发回客户端的代码

            FILE* readFile = fopen(fileName, "rb");
            char buf[BUFFLEN];
            size_t readlen = 1;

            while (readlen != 0)
            {
                readlen = fread(buf, sizeof(char), BUFFLEN, readFile);
                write(socket, buf, readlen);
            }

我错过了什么?这适用于小文本文件。

问题已解决:

其中一个答案让我意识到我的错误。 [=10=] 不是错误的字符。问题出在我的客户接收图像的方式上。每次客户端收到缓冲区时,它都会检查收到的 strlen,但是 strlen(buffer) 在遇到 [=10=] 时停止。所以我将写入的字节数从 strlen(buffer) 更改为客户端在套接字上读取的实际字节数。

感谢 Iharob Al Asimi 的评论和大家的帮助。