0

我创建了这个程序:

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  fstream file;
  file.open("test.bin", ios::in | ios::out | ios::binary);
  if(!file.is_open())
  {
      return -1;
  }
  int n = 5;
  int x;
  file.write(reinterpret_cast<char*>(&n), sizeof(n));
  file.read(reinterpret_cast<char*>(&x), sizeof(x));
  std::cout<<x;
  file.close();
  std::cin.ignore();
  return 0;
}

这应该将整数“n”写入.bin文件“test.bin”,然后从“test.bin”读取数据到整数“x”,然后在屏幕上显示“x”。

当我运行程序时,它显示的不是 5,而是 -842150451。为什么会发生这种情况,我该如何解决?

4

4 回答 4

7

file.write() 不是在写入时移动当前文件指针,导致您在写入数据后从第一个位置读取数据吗?

于 2009-05-26T01:50:45.540 回答
2

file.seekg(0);在读取和写入命令之间插入。

于 2009-05-26T01:53:03.820 回答
1

执行写入后,您必须将文件流重新定位到文件的开头,以便读取刚刚写入的数据。

您还应该检查写入是否写入了您期望的所有内容,以及读取是否实际上读取了任何内容。半随机数是由于读取失败。

于 2009-05-26T01:52:05.630 回答
1

我同意杰里科的观点。你需要一个:

file.seekg (0, ios::beg);
于 2009-05-26T01:53:07.487 回答