这个代码究竟错在哪,怎么改,一定要用string类
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
string a,b;
cin>>a;
ofstream ofile;
ofile.open("d:\\1.dat");
ofile.write((char*)&a,sizeof(a));
ofile.close();
ifstream ifile;
ifile.open("d:\\1.dat");
ifile.read((char*)&b,sizeof(b));
ifile.close();
cout<<b<<endl;
}
c++ string类二进制文件怎么读
答案:4 悬赏:70 手机版
解决时间 2021-03-14 13:19
- 提问者网友:星軌
- 2021-03-14 07:24
最佳答案
- 五星知识达人网友:怙棘
- 2021-03-14 08:21
ofile.write((char*)&a,sizeof(a)); 改成
ofile.write((char*) a.c_str(), a.length()); 或者
ofile << a;
ifile.read((char*)&b,sizeof(b)); 改成
ifile >> b;
试试,你要理解 read write函数的意思,不要乱写代码
ofile.write((char*) a.c_str(), a.length()); 或者
ofile << a;
ifile.read((char*)&b,sizeof(b)); 改成
ifile >> b;
试试,你要理解 read write函数的意思,不要乱写代码
全部回答
- 1楼网友:大漠
- 2021-03-14 09:51
ios::binary 不要用STRING
- 2楼网友:天凉才是好个秋
- 2021-03-14 08:59
你保存的时候应该这样保存: int main() { string str1; string str2; cin >> str1; cin >> str2; ofstream outfile("temp.dat",ios::binary); if(! outfile) { cerr << "error ! " <<endl; return 0; } outfile.write(str1.c_str(),str1.size()+1); outfile.write(str2.c_str(),str2.size()+1); outfile.close(); return 1; } 读取的时候这样读取: int main() { string str1; str1.reserve(100); ifstream infile("temp.dat",ios::binary); if (! infile) { cerr << "error ! " <<endl; return 0; } infile.read((char * )str1.c_str(),100); cout <<str1 <<endl; //输出第一个字符串 cout << (char*)(str1.c_str() + strlen(str1.c_str())+1) << endl;//输出第二个字符串 return 1; } 至于原来你写的程序能够正常工作,是因为你往文件里写的是string类,包含了字符串指针,而同一个进程里面指针是不会变的,所以你读出来之后ok。 当你把“保存”的那一段代码删掉后,你再编译运行这个程序,这时str1/str2分配的指针与你上次写在文件里的指针不同了,所以显示出的字符串是乱码。 我改的程序c语言风格有点重,呵呵,你可以自己看着再改改。
- 3楼网友:话散在刀尖上
- 2021-03-14 08:38
你那个a前面加&符号干嘛啊?还有b前面的&符号!a和b本身就是一个string类的对象,取地址的时候不要加&取址符号!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯