gpt4 book ai didi

C++ 从文件错误中读取对象

转载 作者:行者123 更新时间:2023-11-27 22:29:56 26 4
gpt4 key购买 nike

        fstream file;
Patient Obj("XXX",'M',"XXX");
file.open("Patients.dat",ios::in|ios::out|ios::app);
file.seekg(ios::end);
file.write((char*)&Obj,sizeof(Obj));
file.seekg(ios::beg);


Patient x;

file.read((char*)&x,sizeof(x));
x.printallInfo();

file.close();

我正在使用此代码将对象写入文件,但是当我读取数据时 VC++ 6 崩溃并抛出异常“访问冲突”。(写入成功)

完整代码

#include <iostream>
#include<fstream>
#include <iomanip.h>


#include "Patient.cpp"

using namespace std;

int main(){




fstream file;
Patient Obj("XXX",'M',"XXX");
file.open("Patients.dat",ios::in|ios::out|ios::app);
file.seekg(ios::end);
file.write((char*)&Obj,sizeof(Obj));
file.seekg(ios::beg);


Patient x;

file.read((char*)&x,sizeof(x));

file.close();


return 0;


}

最佳答案

这似乎是一种脆弱且不可移植的编码类方法。您执行此操作的方式可能会发生的一件事是您没有对正在序列化的数据进行深度复制。例如,如果您的 Patient 类的成员之一是 std::string,则会向文件写入一个裸指针,但不会写入任何字符串数据。更糟糕的是,当你读回它时,指针指向……某处……

处理这个问题的更好方法是实际实现一个特定于类的方法,该方法确切地知道如何序列化和反序列化每个成员。

关于C++ 从文件错误中读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com