编程问题:怎么把string类保存到二进制文件中?

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:57:54
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

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((char * )&str1,sizeof(string));
outfile.write((char * )&str2,sizeof(string));

outfile.close();

ifstream infile("temp.dat",ios::binary);

if (! infile)
{
cerr << "Error ! " <<endl;
return 0;
}

infile.read((char * )&str1,sizeof(string));
infile.read((char * )&str2,sizeof(string));

cout <<str1 <<endl;
cout <<str2 <<endl;

return 1;

}

如果我就这样执行的话,str1和str2能保存到文件,而且能够成功

不是以上两位说的原因,因为string类实际上是对char*的封装,你用write那样写其实只是把对应的指针也就是内存地址写进文件了,在执行期,读出的是指针,这时内存中的字符串还在,可以正确显示,你把"保存"的那段删了,实际上刚才在内存中的东西已经没有了,输出的也就是乱码了,这就是你错的原因,我改了下你的程序:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
string str1;
string str2;
int len1,len2;

cin >> str1;
cin >> str2;

ofstream outfile("temp.txt",ios::binary);

if(! outfile)
{
cerr << "Error ! " <<endl;
return 0;
}

len1=str1.length();
len2=str2.length();
outfile.write((char*)str1.c_str(),len1);
outfile.write(" ",sizeof(char));
outfile.write((char*)str2.c_str(),len2);
outfile.write(" ",sizeof(char));

outfile.close();

ifstream infile("temp.txt",ios::binary);
if (! infile)
{
cerr << &