c++ - 以二进制形式将动态数组列表写入文件>

标签 c++ stl file-io

我想写一个结构,它有一个整数 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/

相关文章:

c++ - 从 C++ 中的文件读取结果为空字符串 "sometimes"

c++ - 异常 - C++

c++ - 如何在 DLL 边界上公开 STL 列表?

java:需要提高校验和计算的性能

java - 遇到这段代码,我想知道为什么需要这个静态辅助方法?

c++ - 如何在 Windows 公用文件对话框中显示 API 填充的虚拟文件夹

c++ - 最佳代码二进制情况

c++ - 错误:无法绑定(bind) 'std::ostream {aka std::basic_ostream<char>}

c++ - 将单个参数传递给需要迭代器范围的函数

java - 关于在Java中复制文本文件的问题