mameng1 2014-12-01 11:25 采纳率: 100%
浏览 2598
已采纳

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条回答 默认 最新

  • 飞天狐213 2014-12-01 11:58
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件