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



以下是我正在尝试的代码:

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

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

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

知道到底发生了什么以及如何解决吗?

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

如果有一个字符,这意味着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和其他特殊字符。

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

最新更新