我有2个结构,它们有动态分配的变量。一个结构包含由在fisrt结构中定义的元素组成的阵列。定义看起来像这样。
typedef struct entry {
char *key;
int value;
} entry;
typedef struct map {
entry **elem;
int nr_elem;
int cap;
} map;
基本上我必须从二进制格式文件中读取数据。但是我不能立刻读取整个地图块,因为我无法指定一定的大小。我唯一的信息是,我的所有条目中的每个字符串键都以\0
结尾,但是它们可能有任何大小,因此我不能将fread
用于我的条目。鉴于我只能读取二进制格式,这对于这种情况有什么好的解决方法?
答案 0 :(得分:0)
必须更精确地指定文件格式。
二进制文件格式的规范必须非常简洁:
了解这些详细信息后,请确保fopen
文件采用"rb"
二进制模式,并使用fgetc()
逐字节读取文件。适当地处理编码。
请注意,不建议使用fwrite
编写数字作为编写者的字节顺序,阅读器平台可能会有所不同,以及int
的大小。
使用文本格式要灵活得多。它使更多更容易调试,互操作,手动创建......如果需要,只使用二进制格式。