我想写一个结构,它有一个整数 id 列表。该列表可以有不同的长度。
typedef struct ss_iidx_node {
int totalFreq;
vector < int > docIDList;
}s_iidx_node;
现在,我希望将这个结构写到一个文件中并读回。 我该怎么做?
写完了:
fwrite(&obj,sizeof(s_iidx_node),1,dat_fd2);
当我读回它时,它给出了垃圾值。似乎它只存储 STL vector 的起始位置和结束位置……阅读时哪个是垃圾? 知道怎么做了
谢谢
最佳答案
您的代码根本不可移植。它试图将对象视为原始字节序列,这对于 C++ 标准中的非 POD 对象显然是未定义的(并且您的结构是非 POD,因为它包含非 POD 类型的成员 std::vector
).
在实践中, vector 类通常由 3 个字段组成:指向数据开始的指针、大小和容量。您看到的是构成写入文件的那些值的字节。
您应该考虑完全避免 C 风格的文件 I/O,并使用 C++ 流和 Boost Serialization library相反 - 它支持开箱即用的 STL 集合。
关于c++ - 以二进制形式将动态数组列表写入文件>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101135/