使用char*和std::list将数据结构写入二进制文件
Writing data structure with char* and std::list to binary files
我正在尝试编写这样的数据结构:
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++课程,讲师说你不能存储指向二进制文件的指针,因为当你试图读回它们时,在写入它们之前使用的指针(地址)将不会保留在列表中。因此,您必须保存数据,而不是指针
相关文章:
- 将内部带有矢量的结构保存/读取到二进制文件中
- 将文本文件解析为树状数据结构
- 如何使用位字段将数据从二进制文件复制到结构中?
- 将文件读入数据结构
- C++ 尝试优化每一帧将数据打印到二进制文件
- 用二进制文件填充结构
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 将结构写入二进制文件后,该文件仍然具有正常字符,而不是不可读字符
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- 如何在结构中存储二进制文件数据
- 用于存储数据的结构和外部二进制文件
- 使用二进制模式将数据结构写入文件
- C++结构二进制文件
- 将垃圾数据写入二进制文件
- 读取结构C++二进制文件的运行时错误
- 从二进制文件读取结构数据时获取垃圾值
- 使用char*和std::list将数据结构写入二进制文件
- 正在将某些数据结构写入文件
- 在使用数据结构从文件中读取数据时遇到麻烦
- 从类数组写入数据到二进制文件