为什么没有这个程序读取(或写?)从.bin文件是否正确? (C ++)

StackOverflow https://stackoverflow.com/questions/908605

  •  05-09-2019
  •  | 
  •  

我建立这个程序:

#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。为什么会发生这种情况,我怎么能解决这个问题?

有帮助吗?

解决方案

是不是file.write()移动当前文件指针,当你把它写,从而导致您从第一位置写入数据之后读出的数据?

其他提示

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

您有你才能看到你刚刚编写的数据做写后的文件流重新定位到该文件的开头。

您也应该检查写写你预计它的一切,以及是否读取实际读取任何东西。半随机数是由于读出失败。

我同意Jherico。您需要:

file.seekg (0, ios::beg);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top