读取二进制文件时输出不一致

时间:2016-10-11 11:07:11

标签: c++ c++11 binaryfiles readfile

调整我在SO中看到的一些代码,我提出了以下解决方案:

fstream file("sample.bin", ios::binary | ios::in | ios::ate);

unsigned char charsRead[(int)file.tellg()];

file.read((char *) &charsRead, sizeof(char*));
for(int i=0; i<sizeof(charsRead); i++) 
    cout << (int) charsRead[i] << endl;
file.close();

它确实编译,但每次执行时,它都会返回不同的输出。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

我认为前4个(或8个)字节是等于的,不同的输出从第5个或第9个字节开始。

正如πάνταῥεῖ所指出的那样,您读取sizeof(char*)个字节(通常为4或8个字节)并打印sizeof(charsRead)个字节。

如果sizeof(char*) < sizeof(charsRead)(即:如果文件的暗点大于4或8),则写入

  • sizeof(char*)已初始化的字符
  • sizeof(charsRead) - sizeof(char*)未初始化的字符(因此,随意值)。

答案 1 :(得分:0)

我仍然不理解输出,但我找到了一个非常一致的解决方案,用于使用缓冲区读取二进制文件。 http://www.cplusplus.com/doc/tutorial/files/