从二进制文件中读取具有动态分配变量的结构

时间:2016-02-07 23:05:02

标签: c memory-management data-structures binary

我有2个结构,它们有动态分配的变量。一个结构包含由在fisrt结构中定义的元素组成的阵列。定义看起来像这样。

typedef struct entry {
    char *key;
    int value;
} entry;

typedef struct map {
    entry **elem;
    int nr_elem;
    int cap;
} map;

基本上我必须从二进制格式文件中读取数据。但是我不能立刻读取整个地图块,因为我无法指定一定的大小。我唯一的信息是,我的所有条目中的每个字符串键都以\0结尾,但是它们可能有任何大小,因此我不能将fread用于我的条目。鉴于我只能读取二进制格式,这对于这种情况有什么好的解决方法?

1 个答案:

答案 0 :(得分:0)

必须更精确地指定文件格式。

二进制文件格式的规范必须非常简洁:

  • 如何编码数字?多少字节,little-endian或big-endian?
  • 如何编码和终止字符串?
  • 记录如何分开?

了解这些详细信息后,请确保fopen文件采用"rb"二进制模式,并使用fgetc()逐字节读取文件。适当地处理编码。

请注意,不建议使用fwrite编写数字作为编写者的字节顺序,阅读器平台可能会有所不同,以及int的大小。

使用文本格式要灵活得多。它使更多更容易调试,互操作,手动创建......如果需要,只使用二进制格式。