[英]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字符串函数代替cstring
或string.h
的C ++函数。
不过,老实说,您可能想听@πάνταῥεῖ。 您正在尝试序列化 C结构。 通过struct读取数据是非常“ C”的事情,但是您要在其中混入“ C ++”类。 这两种范式不能很好地融合在一起。 BOOST有一个序列化库 ,如果您真的想序列化C ++类,我将从那里开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.