C++ 简单c++;二进制文件读取
我有一个由fortran代码创建的二进制文件。我想编写一个C++代码来读取这个二进制文件,然后通过STD::CUT将其吐出来。以下是迄今为止我的代码: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
#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';