2

我正在查看类似的问题,但没有找到解决方案。我的结构类似于具有 2 个以上节点的树。我还有一个指向根的指针。

typedef struct tree
{
   char *name;
   struct tree *children
}TREE;

我想将此数据写入文件,但只是感到困惑,所以很想得到一些帮助

我想使用:

int writeData(TREE *root , char *filename){

    FILE *f = NULL;
    int numWritten = 0;

fopen_s(&f , filename, "w+" );
fwrite(root , sizeof(TREE) , ??? , f);

}

我不知道该写什么,如果我对每个元素都有孩子,所以我想把它们都扔掉——我该怎么做?

4

2 回答 2

5

嗯,这个问题被称为“序列化结构化数据”——基本上它与解析相反。问题是您不能只将内存中数据结构的原始二进制数据转储到文件中 - 当地址更改时,它在下次启动程序时没有意义。您必须提出一种能够描述您的数据结构并将其写入文件的格式。然后,当然,如果您想稍后从文件中恢复数据结构,您还必须为该格式编写解析器。

我建议使用 JSON——它是一种轻量级、易于编写和易于阅读的数据格式,而且它也是通用的——它是存储简单抽象数据类型的理想选择。这是我的库,可以从基本数据类型(例如数组、关联数组、字符串、数字......)生成和解析 JSON

如果我对每个元素都有孩子,那么我怎么能把它们都扔掉

对于这个问题:您可能正在寻找递归。当您经过每个节点/叶子时,您需要递归遍历您的数据树并生成表示您的数据结构的数据(假设您的数据结构类似于图/树)。

于 2012-09-18T15:28:30.643 回答
0

您可以复制工作数据结构,以便将所有使用的 TREE 存储在 TREE 数组中,并将所有 TREE 指针更改为数组的索引,然后将整个 TREE 数组存储在二进制文件中。哦,char 指针也必须是指向存储的单个字符数组的指针。

不如 YAML 或 JSON 可读,但如果您需要二进制格式...

于 2012-09-19T20:18:57.617 回答