为什么 ifstream reader 只读取图像文件的前 10 个字节?

Why ifstream reader read only first 10 bytes of an image file?

这是我正在尝试使用的代码:

ifstream fileReader("server_data\test2.jpg", ios::in | ios::binary);
char buffer[RESP_LENGTH];
memset(buffer, '[=11=]', RESP_LENGTH);
if (fileReader.is_open())
{
    fileReader.seekg(0);
    fileReader.read(buffer, RESP_LENGTH);
    cout << buffer<<endl<<"Length: "<<strlen(buffer);
}
fileReader.close();

它只是读取前几个字节。它也因文件而异。

我怀疑,可能它得到一个评估为 NULL 的字符,因此我的长度和字符串只得到一小部分?

知道真正发生了什么以及如何解决它吗?

问题不在于您阅读的方式,而在于您打印的方式。

如果有 [=11=] 个字符,则表示 end of string。因此字符串操作(如 strlen 或打印到 cout)将在该字符处停止(考虑到 char* 中包含的 string 停在此处),但这并不意味着您的char* 数组不包含更多字符....

相反,您应该这样做:

cout << "Got " << fileReader.gcount() << "characters:";
for ( size_t i = 0; i != fileReader.gcount(); ++i )
    cout << buffer[i];

然后,您将打印您读取的所有字节,忽略 EOS 和其他特殊字符。

请注意,特殊字符将无法正确打印(参见 this post)。但我猜你的目标不是打印二进制内容。