我正在使用Visual Studio 2012(32位)中的C ++应用程序。当我使用fstream读取文件并读取四个字节两次时,我会从tellg中获得令人困惑的值。我期待0,4和8。
std::fstream file;
file.open(filename, std::ios::in , std::ios::binary);
if ( !file.is_open())
{
throw exception("Error opening file for reading");
}
int pos = file.tellg(); // pos is 0
boost::int32_t usedBlocks;
int size = sizeof (usedBlocks);
file.read(reinterpret_cast<char*>(&usedBlocks),sizeof(usedBlocks));
pos = file.tellg(); //pos is 3588
//Read reserved size
file.read(reinterpret_cast<char*>(&reservedSize),sizeof(reservedSize));
pos = file.tellg(); //pos is 3592
为什么会这样?
我已将代码更改为使用fopen,fread和ftell,然后pos值为0,4和8。
usedBlocks
是boost::int32
。 boost::int32
实际上是int
,而不是结构。即使将它们更改为int也会产生相同的结果。
答案 0 :(得分:1)
如果您在调试器中查看pos
的值,则可能因优化而错误。
尝试将pos
的值打印到标准输出中。