调整我在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();
它确实编译,但每次执行时,它都会返回不同的输出。有谁知道为什么会这样?
答案 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/