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

Inconsistent output when reading binary file

改编我在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();

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

我假设前 4 个(或 8 个)字节永远相等,并且不同的输出从第 5 个或第 9 个字节开始。

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

如果sizeof(char*) < sizeof(charsRead)(即:如果文件的dim大于4或8),你写

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

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