C++;结构二进制文件 大家好,我是C++编程新手 我已将结构保存在二进制文件中。。 但当尝试读取它时,应用程序正在崩溃 这是我的密码 struct Person { string name; int age; }; void main() { Person p; ifstream is("person.data",ios::binary); is.read((char*)&p,sizeof(p)); }
您正在使用C++;结构二进制文件 大家好,我是C++编程新手 我已将结构保存在二进制文件中。。 但当尝试读取它时,应用程序正在崩溃 这是我的密码 struct Person { string name; int age; }; void main() { Person p; ifstream is("person.data",ios::binary); is.read((char*)&p,sizeof(p)); },c++,C++,您正在使用sizeof(p) 字符串类的长度可变。这意味着它本质上是一个结构,其中包含指向堆中其他一些字符的指针。试图通过结构读取字符串将不起作用。您必须将所有字符放在结构本身中,否则它只会读入一个指向堆中某个位置的指针(现在已失效),并可能导致分段错误 试试这个: struct Person { char name[40]; int age; }; void main() { Person p; ifstream is("person.data",ios::b
sizeof(p)
字符串
类的长度可变。这意味着它本质上是一个结构,其中包含指向堆中其他一些字符的指针。试图通过结构读取字符串将不起作用。您必须将所有字符放在结构本身中,否则它只会读入一个指向堆中某个位置的指针(现在已失效),并可能导致分段错误
试试这个:
struct Person
{
char name[40];
int age;
};
void main()
{
Person p;
ifstream is("person.data",ios::binary);
is.read((char*)&p,sizeof(p));
}
然后使用C字符串函数代替C++代码中的C++字符串,在代码< <代码> >代码>字符串> h <代码> < /P> 不过,老实说,你可能想听听@πάνταῥεῖ . 您正在尝试序列化C结构。在via struct中读取数据是一件非常“C”的事情,但您将“C++”类混入其中。这两种范式并不很好地结合,如果你真的想序列化C++类,我会从那里开始。
你使用的是<代码> siZoof(p)< /c>字符串
类的长度可变。这意味着它本质上是一个结构,其中包含指向堆中其他一些字符的指针。试图通过结构读取字符串将不起作用。您必须将所有字符放在结构本身中,否则它只会读入一个指向堆中某个位置的指针(现在已失效),并可能导致分段错误
试试这个:
struct Person
{
char name[40];
int age;
};
void main()
{
Person p;
ifstream is("person.data",ios::binary);
is.read((char*)&p,sizeof(p));
}
然后使用C字符串函数代替C++代码中的C++字符串,在代码< <代码> >代码>字符串> h <代码> < /P>
不过,老实说,你可能想听听@πάνταῥεῖ . 您正在尝试序列化C结构。在via struct中读取数据是一件非常“C”的事情,但您将“C++”类混入其中。这两种范式并不很好地结合,如果你真的想序列化C++类,我会从那里开始。你需要查看序列化。您不能将复杂类作为二进制映像保存到文件中。您需要查看序列化。无法将复杂类作为二进制图像保存到文件中。是否接受答案?:)接受答案?:)