2 mameng1 mameng1 于 2014.12.01 19:25 提问

C++read读取二进制文件

#include
#include
#include
#include
#include"stdlib.h"
using namespace std;
const char* file="file.dat";
//===================================================
class plaint{
private:
string name;
string population;
string g;
inline void eatline(){while(cin.get()!='/n') continue;}
public:
plaint(){}
plaint(string name,string population,string g):name(name),population(population),g(g){}
void show();
};
//==================================
int plaint::ct=0;
void plaint::show(){
ifstream fin;
fin.open(file,ios::binary);//打开文件
if(fin.is_open()){
fin.seekg(0);
cout<<"open the file.dat"<<endl;
fin.read((char*)&this,sizeof(plaint));
cout<<" :"<<name<<endl;
if(fin.eof()){
fin.clear();
}
else{
cout<<"error in reading";
exit(EXIT_FAILURE);
}
}
else{
cout<<"error in reading";
exit(EXIT_FAILURE);
}

}
//=====================================================
void main(){
plaint p1;
p1.show();

}

1个回答

feitianhu213
feitianhu213   2014.12.01 19:58
已采纳

我估计原因有两个:
1、 string 是一个容器,sizeof 得到的只是 string 这个类的大小,与里面的元素个数没关系。可以换成数组试试。
2、不明白 fin.read((char*)&this,sizeof(plaint)) 中的第一个参数作用,是不是多打了个 '&'?
希望对你有帮助。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!