C++ fstream流读取的问题

justforna 2012-05-05 09:02:33
代码(省略头文件等):
fs.open("d:\\mmmmmm.mm",ios::out|ios::binary|ios::app);
string a = "其实这不是我想说的话你难道不知道么";
string aa = "今天我从一个把豆花煮成豆腐的老几子那里买了一个豆腐";
fs.write((char *)(&a),sizeof(string));
fs.write((char *)(&aa),sizeof(string));
fs.close();

int i = 0;
int max = 0;
fs.open("d:\\mmmmmm.mm",ios::in|ios::binary);
fs.seekg(0,ios::beg);
fs.seekg(0,ios::end);
max = fs.tellg();
fs.seekg(0,ios::beg);
string s = "";

while(i < max)
{
fs.read((char *)(&s),sizeof(string));
fs.seekg(0,i);
cout<<s<<endl;
i += sizeof(string);
}
fs.close();


这一段代码第一次执行是不会出问题的,但第二次再执行就报错。
但如果把string类型换成int或者double类型,就不会有问题了。
请高手帮忙解读下为什么。


...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
justforna 2012-05-06
  • 打赏
  • 举报
回复
竟然没人帮助下
justforna 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

string是标准库定义的,可以换成字符数组试试

另外,string s;就行了,默认为空字符串
[/Quote]
换成字符串数组的确没有问题的,但还纠结在为什么不能用stl的string。
因为若是汉字,char又得换成wchar_t,就更麻烦了。
justforna 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

其实我觉得string是一个类,而你写入文件的是一个对象。你很难保证你不会出现问题的。比如:你用int和double这些内置类型的时候是不会出现问题的。但是你用string就有点类似于序列化的意思了。所以出错的话我不会觉得意外。
[/Quote]

string,在STL里也可以算作内置类型吧。
double占两个字节,指针也只能指向它的第一个字节的地址,也是序列化了的啊。
shellisaway 2012-05-05
  • 打赏
  • 举报
回复
string是标准库定义的,可以换成字符数组试试

另外,string s;就行了,默认为空字符串
W170532934 2012-05-05
  • 打赏
  • 举报
回复
其实我觉得string是一个类,而你写入文件的是一个对象。你很难保证你不会出现问题的。比如:你用int和double这些内置类型的时候是不会出现问题的。但是你用string就有点类似于序列化的意思了。所以出错的话我不会觉得意外。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧