gpt4 book ai didi

c++ - 使用 char* 和 std::list 将数据结构写入二进制文件

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

我正在尝试编写这样的数据结构:

struct dataEntry
{
std::list<int> listTiles;
char* pData;
int nSize;
}

二进制文件。

我使用 ofstream 写入二进制文件:

Write(char* fileName, const dataEntry& dataStruct)
{
ofstream binFile("fileName, ios::out | ios::binary | ios::trunc);
if(binFile.open())
{
binFile.write((char*)&dataStruct, sizeof(dataStruct));
binFile.close();
}
}

我用同样的方法读回了二进制文件:

Read(char* fileName, const dataEntry& dataStruct)
{
ifstream binFile("fileName, ios::in| ios::binary );
if(binFile.open())
{
binFile.read((char*)&dataStruct, sizeof(dataStruct));
binFile.close();
}
}

但是,我无法在读取二进制文件后遍历列表。它给了我一个异常(exception),说“列表迭代器超出范围”。

第二个问题是,当我第二次尝试读取二进制文件时,“pData”不是我输入的内容。

int Main()
{
char* name = "C:\\file.dat";
char* buf = "ABCDEFG";
dataEntry newData;
newData.listTiles.push_back(1);
newData.listTiles.push_back(2);
newData.nSize = 5;
newData.pData = buf;
Write(name, newData);



Read(name, newData);
buf = newData.pData; // wrong value when read 2nd time
newData.listTiles.remove(2); // crashed here
}

最佳答案

查看 Udemy 上的高级 c++ 类(class),讲师说你不能存储指向二进制文件的指针,因为当你试图读回它们时,你在写入它们之前使用的指针(地址)将不会仍然保留给列表。所以你必须保存数据而不是指针

关于c++ - 使用 char* 和 std::list 将数据结构写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33908201/

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