繁体   English   中英

C ++结构二进制文件

[英]C++ struct binary file

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

struct Person
{
    string name;
    int age;

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


}

您正在使用sizeof(p)

string类的长度可变。 这意味着它本质上是一个结构,里面有一个指向堆中其他字符的指针。 尝试通过struct读取字符串不起作用。 您必须将所有字符放到结构本身中,否则它将只读取(现在已失效)指向堆中某处的指针,并可能导致分段错误。

尝试这个:

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结构。 通过struct读取数据是非常“ C”的事情,但是您要在其中混入“ C ++”类。 这两种范式不能很好地融合在一起。 BOOST有一个序列化库 ,如果您真的想序列化C ++类,我将从那里开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM