C++ 简单c++;二进制文件读取

C++ 简单c++;二进制文件读取,c++,binaryfiles,C++,Binaryfiles,我有一个由fortran代码创建的二进制文件。我想编写一个C++代码来读取这个二进制文件,然后通过STD::CUT将其吐出来。以下是迄今为止我的代码: #include<fstream> #include<iostream> using namespace std; int main(){ ifstream file("tofu.txt", ios::binary | ios::in | ios::ate); ifstream::pos_typ

我有一个由fortran代码创建的二进制文件。我想编写一个C++代码来读取这个二进制文件,然后通过STD::CUT将其吐出来。以下是迄今为止我的代码:

    #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;
}

有人能告诉我代码哪里做错了吗?谢谢

您忘记终止您的字符数组,导致未定义的行为。像这样修复它:

char bar[500];
assert(size < 500);
file.read((char*) (&bar), size - 1);
bar[size] = '\0';
charbar[500];
断言(大小<500);
read((char*)(&bar),大小为-1);
条[size]='\0';

(请确保检查
size
的大小也不超过您的空间!)

您的代码具有未定义的行为,因为
bar
的内容不会形成以null结尾的字符串。该文件包含什么?例如,如果第一个字节是零,它就可以正常工作。@KerrekSB:很好<代码>字符条[500]应替换为
字符条[500]={0}使用正确的空终止符,您的程序。
char bar[500];
assert(size < 500);
file.read((char*) (&bar), size - 1);
bar[size] = '\0';