c++文件读写 ,求大侠指点下

jyl_static 2012-03-14 09:51:59
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void print()
{
string name = "changsha";
ofstream outfile("my.txt",ios::binary);
outfile.write((char*)&name,sizeof(name));
outfile.close();
}

void scan()
{
string name;
ifstream infile("my.txt",ios::binary);
infile.read((char*)&name,sizeof(name));
cout << name << endl;;
infile.close();
}
int main()
{
//print();//写入
scan();//读取
return 0;
}

//我先调用print();将string 对象写入文件,再调用scan();读取,但是这时候出错了。。。。


但是如果把读和写放在一起又没有问题


#include <fstream>
#include <string>
using namespace std;
void print()
{
string name = "changsha";
ofstream outfile("my.txt",ios::binary);
outfile.write((char*)&name,sizeof(name));
outfile.close();
string name1;
ifstream infile("my.txt",ios::binary);
infile.read((char*)&name1,sizeof(name1));
cout << name1 << endl;;
infile.close();
}
int main()
{
print();
return 0;
}
这样做就没问题了,,,求解决呀
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyl_static 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pun_c 的回复:]
你的string不能这样用!

第一个例子中scan()的string是没有初始化的,你就这样强行转换成(char*)肯定是不正确的,因为内部的那个数据不一定有足够容量;
第二个例子,由于你用回同一个变量string,一开始初始化了,所以那个name变量刚好有足够的容量来保存数据。

还是建议用固定数组来读取
[/Quote]把string 初始化了还是不行
jyl_static 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baichi4141 的回复:]
string name;
ifstream infile("my.txt",ios::binary);
infile.read((char*)&name,sizeof(name));

read的两个参数分别是数据指针和数据大小。
请问一个还没有初始化的name变量,它的大小是多少?你都不知道的东西,你让函数怎么用?

你写数据的时候,数据对于你是已知的
你读数据的……
[/Quote] 我把name初始化了后还是不行呀 。。。
string name = “ ”;
ifstream infile("my.txt",ios::binary);
infile.read((char*)&name,sizeof(name));
cout << name << endl;;
infile.close();
lida2003 2012-03-15
  • 打赏
  • 举报
回复
我看是你的sizeof(name) 有问题,你可以打印出来看看。
baichi4141 2012-03-15
  • 打赏
  • 举报
回复
string name;
ifstream infile("my.txt",ios::binary);
infile.read((char*)&name,sizeof(name));

read的两个参数分别是数据指针和数据大小。
请问一个还没有初始化的name变量,它的大小是多少?你都不知道的东西,你让函数怎么用?

你写数据的时候,数据对于你是已知的
你读数据的时候,数据对于你是未知的
PunWinger 2012-03-14
  • 打赏
  • 举报
回复
你的string不能这样用!

第一个例子中scan()的string是没有初始化的,你就这样强行转换成(char*)肯定是不正确的,因为内部的那个数据不一定有足够容量;
第二个例子,由于你用回同一个变量string,一开始初始化了,所以那个name变量刚好有足够的容量来保存数据。

还是建议用固定数组来读取
jyl_static 2012-03-14
  • 打赏
  • 举报
回复
为什么不能用read 和write 呀
merlinfang 2012-03-14
  • 打赏
  • 举报
回复
read和write都写错了,见下
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void print()
{
string name = "changsha";
ofstream outfile("my.txt",ios::binary);
outfile << name;
outfile.close();
}

void scan()
{
string name;
ifstream infile("my.txt",ios::binary);
infile >> name;
cout << name << endl;;
infile.close();
}
int main()
{
print();//写入
scan();//读取
return 0;
}


64,648

社区成员

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

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