大家好,我是c ++编程的新手 我已经在二进制文件中保存了struct .. 但是当试图阅读它时,应用程序崩溃了 这是我的代码
struct Person
{
string name;
int age;
};
void main()
{
Person p;
ifstream is("person.data",ios::binary);
is.read((char*)&p,sizeof(p));
}
答案 0 :(得分:4)
您正在使用sizeof(p)
。
string
类的长度可变。这意味着它本质上是一个结构体,其中有一个指针指向堆中的其他一些字符。尝试读取via结构中的字符串将不起作用。您必须将所有字符放在结构本身中,否则它只会读入指向堆中某处的(现在已死)指针,并可能导致分段错误。
试试这个:
struct Person
{
char name[40];
int age;
};
void main()
{
Person p;
ifstream is("person.data",ios::binary);
is.read((char*)&p,sizeof(p));
}
然后使用c字符串函数代替cstring
或string.h
中的C ++函数。
老实说,你可能想听听@πάνταῥεῖ。您正在尝试序列化 C结构。在via struct中读取数据是一件非常“C”的事情,但你要将“C ++”类混合在一起。这两种范式并不是很好。 BOOST has a serialization library,如果你真的想序列化C ++类,我会从那里开始。