我正在尝试编写这样的数据结构:
struct dataEntry
{
std::list<int> listTiles;
char* pData;
int nSize;
}
转换为二进制文件。
我用流写入一个二进制文件:
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();
}
}
但是,在读取二进制文件后,我无法遍历列表。它给了我一个异常,说"列表迭代器超出范围"。
第二个问题是,当我第二次尝试读取二进制文件时,"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++课程,讲师说你不能存储指向二进制文件的指针,因为当你试图读回它们时,在写入它们之前使用的指针(地址)将不会保留在列表中。因此,您必须保存数据,而不是指针