简单的c ++二进制文件读取

时间:2016-04-24 15:19:43

标签: c++ binaryfiles

我有一些由fortran代码创建的二进制文件。我想编写一个c ++代码来读取这个二进制文件,然后通过std :: cout吐出来。到目前为止我的代码是:

    #include<fstream>
    #include<iostream>

using namespace std;

int main(){
  ifstream file("tofu.txt", ios::binary | ios::in | ios::ate);
  ifstream::pos_type size;
  if(file.is_open()){
    size = file.tellg();
    cout << "size = " << size << '\n';
    file.seekg(0);
    char bar[500];
    file.read((char*) (&bar), size);
    file.close();
    string foo(bar);
    cout << "foo = " << foo << '\n';
  }
  else cout << "Unable to open file";
  return 0;
}

然而,在编译和运行时,代码没有给我任何东西:

size = 250
foo =

有人能告诉我代码中哪里出错吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您忘记终止您的char数组,导致未定义的行为。修复如下:

char bar[500];
assert(size < 500);
file.read((char*) (&bar), size - 1);
bar[size] = '\0';

(请务必检查size是否大于您的空间!)