C++要把对象写入文件,可是对象里面有string怎么办呢?

stormier 2012-12-09 09:22:26
string并不会真把内容写进去,只是写进去地址
...全文
193 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2012-12-09
  • 打赏
  • 举报
回复
endl或者是'\n'
stormier 2012-12-09
  • 打赏
  • 举报
回复
引用 8 楼 turingo 的回复:
可以啊,加个换行符就可以了。 引用 7 楼 stormier 的回复:引用 5 楼 turingo 的回复:建议直接控制string的读写,比如: 1、写的时候,char* str = new_student.name.c_str(),然后先写入str的长度,然后再写入str的内容; 2、读的时候,char* str,先读取长度后给str动态分配空间,然后再读入……
弱弱的问一下换行符是什么?char a=10然后fstream<<a吗?
图灵狗 2012-12-09
  • 打赏
  • 举报
回复
可以啊,加个换行符就可以了。
引用 7 楼 stormier 的回复:
引用 5 楼 turingo 的回复:建议直接控制string的读写,比如: 1、写的时候,char* str = new_student.name.c_str(),然后先写入str的长度,然后再写入str的内容; 2、读的时候,char* str,先读取长度后给str动态分配空间,然后再读入内容到str中,再将str复制给new_student.name。 如果我……
stormier 2012-12-09
  • 打赏
  • 举报
回复
引用 5 楼 turingo 的回复:
建议直接控制string的读写,比如: 1、写的时候,char* str = new_student.name.c_str(),然后先写入str的长度,然后再写入str的内容; 2、读的时候,char* str,先读取长度后给str动态分配空间,然后再读入内容到str中,再将str复制给new_student.name。
如果我这样写行不行,就是一个string写一行,读的时候也一个string读一行? 但是不知道写完一个数据之后怎么换行
sjjwind 2012-12-09
  • 打赏
  • 举报
回复
读的时候

string str;
freopen("xx.txt","r",stdin);    //将stdin指针指向xx.txt
cin >> str;
fclose(stdin);                  //关闭文件
freopen("CON","r",stdin);       //重新将stdin指针指向控制台
写的时候

string str;
freopen("xx.txt","w",stdout);
cout << str << endl;
fclose(str);
freopen("CON","w",stdout);
用iofstream也是一样的用法。
图灵狗 2012-12-09
  • 打赏
  • 举报
回复
建议直接控制string的读写,比如: 1、写的时候,char* str = new_student.name.c_str(),然后先写入str的长度,然后再写入str的内容; 2、读的时候,char* str,先读取长度后给str动态分配空间,然后再读入内容到str中,再将str复制给new_student.name。
stormier 2012-12-09
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
1、写的时候,string的内容可以用c_str函数取得; 2、读的时候,先读到一个char[]的缓冲,然后再转换为string类型即可。
请问读的时候呢?见上一个贴
图灵狗 2012-12-09
  • 打赏
  • 举报
回复
1、写的时候,string的内容可以用c_str函数取得; 2、读的时候,先读到一个char[]的缓冲,然后再转换为string类型即可。
stormier 2012-12-09
  • 打赏
  • 举报
回复
引用 1 楼 sjjwind 的回复:
比如你用fwrite,可以写string::c_str()进去,比如你用freopen,直接cout << string::c_str();就可以了,如果你用API,还是写c_str()进去。
喔,感觉好像有点麻烦,请问一下具体怎么写呢? 我现在这么写的: fstream myFile; myFile.open("students.dat",ios::out|ios::binary); myFile.write(reinterpret_cast<char *>(&new_student),sizeof(new_student)); 比如student对象里面有两个string 分别是ID和name 另外这样的话,由于string不定长,这样读取的时候会比较麻烦,需要判断每个string的长度,这样本来读一个对象和写一个对象长度是固定的,这回就没法固定了,尤其是读的时候怎样读呢?
sjjwind 2012-12-09
  • 打赏
  • 举报
回复
比如你用fwrite,可以写string::c_str()进去,比如你用freopen,直接cout << string::c_str();就可以了,如果你用API,还是写c_str()进去。

64,646

社区成员

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

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