0

我正在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::int32boost::int32实际上是一个int,而不是一个结构。即使将它们更改为 int 也会产生相同的结果。

4

1 回答 1

1

如果您在调试器中查看 的值pos,它们可能由于优化而出错。

尝试将 的值打印pos到标准输出中。

于 2013-07-11T08:56:29.437 回答