C ++ struct二进制文件

时间:2015-02-24 19:20:50

标签: c++

大家好,我是c ++编程的新手 我已经在二进制文件中保存了struct .. 但是当试图阅读它时,应用程序崩溃了 这是我的代码

struct Person
{
    string name;
    int age;

};
void main()
{
    Person p;
    ifstream is("person.data",ios::binary);
    is.read((char*)&p,sizeof(p));


}

1 个答案:

答案 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字符串函数代替cstringstring.h中的C ++函数。

老实说,你可能想听听@πάνταῥεῖ。您正在尝试序列化 C结构。在via struct中读取数据是一件非常“C”的事情,但你要将“C ++”类混合在一起。这两种范式并不是很好。 BOOST has a serialization library,如果你真的想序列化C ++类,我会从那里开始。