gpt4 book ai didi

c++ - 以二进制格式读取类

转载 作者:行者123 更新时间:2023-11-30 05:01:16 25 4
gpt4 key购买 nike

我正在尝试像这样以二进制格式阅读我的类(class):

FILE* file = fopen(filePath.toStdString().c_str(), "rb");
if (file == NULL)
{
QMessageBox::critical(this, "Ошибка!", "Ошибка при открытии файла!");
return;
}

while (!feof(file))
{
Dog* dog;
fread(dog, sizeof(Dog), 1, file);
_list->emplace_back(dog);
}
fclose(file);

但是我得到一个错误:程序崩溃了。文件存在,数据是这样写的:

FILE* file = fopen(filePath.toStdString().c_str(), "wb");
if (file == NULL)
{
QMessageBox::critical(this, "Ошибка!", "Ошибка при открытии файла!");
return;
}

for (int i = 0; i < _list->size(); i++)
{
fwrite(_list->get(i), sizeof(Dog), 1, file);
}
fclose(file);

这段代码运行没有错误。请帮助:(

最佳答案

实际上问题是 Dog 类包含一个字段 QString,没有程序知道要读取多少字节(字符串 "asd""asdasdasdasdasdasdsad" 返回不同的 syzeof)。因此错误。这样做实际上是正确的:

    FILE* file = fopen(filePath.toStdString().c_str(), "rb");

while (!feof(file))
{
int nameSize;
QString name;
int breedSize;
QString breed;
int weigth;
QDate birthDate;

fread(&nameSize, sizeof(int), 1, file);
for (int i = 0; i < nameSize; i++)
{
QChar ch;
fread(&ch, sizeof(QChar), 1, file);
name += ch;
}

fread(&breedSize, sizeof(int), 1, file);
for (int i = 0; i < breedSize; i++)
{
QChar ch;
fread(&ch, sizeof(QChar), 1, file);
breed += ch;
}

fread(&weigth, sizeof(int), 1, file);
fread(&birthDate, sizeof(QDate), 1, file);
_list->emplace_back(new Dog(name, breed, weigth, birthDate));
}
fclose(file);

关于c++ - 以二进制格式读取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50393967/

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