如何将动态分配的结构写入文件

时间:2010-10-28 21:57:11

标签: c serialization

我在C程序中有一个复杂的结构,它有许多动态分配内存的成员。如何将此结构写入文本/二进制文件?如何从文件读取的数据中重新创建整个结构。

struct parseinfo{
 int  varcount;
 int  termcount;
 char **variables;
 char **terminals;
 char ***actions;
};

成员变量,终端和动作都是动态分配的,我需要将这个结构写入文件,以便以后重构结构。

4 个答案:

答案 0 :(得分:4)

您必须写入此结构序列化反序列化函数,您不能将此结构写入文件作为原始数据,因为您已在堆上分配了指针没有意义将这些值保存在文件中。

答案 1 :(得分:2)

简短:不是以自动方式。

从本质上讲,它在很大程度上取决于结构的语义。 如果里面的数据字段指定了其中某些arraiys的长度, 你可以重建结构。 但你必须小心“相信”这些价值观。 (如果您认为数组中有2 ^ 34个条目,则可能导致堆栈溢出(好词))。 但除此之外,它只是对每个成员(痛苦)都是真的

您可以搜索一下ASN.1和TLV结构。

答案 2 :(得分:1)

以下是二进制序列化的一些建议:

您可以将字符串序列化为la C(写入终止'\ 0')或 通过写入大小(例如,一个int),然后是内容。

您可以通过写入数组的长度来序列化字符串数组 然后是字符串。

如果您可以在不同的文件上反序列化该文件 架构(不同的int大小,不同的endianness ......),然后采取 小心谨慎地指定文件的二进制格式。在这种情况下 您可能需要查看XDR序列标准。

对于ASCII序列化,我喜欢JSON格式。

答案 3 :(得分:0)

我建议的方法是考虑首先创建项目需要什么?

当谈到char **variables; char **terminals; char **actions时,您显然必须弄清楚如何声明并阅读它们,但我认为您不能将/ 0注入文件(EOF字符? ?)

您希望如何将其写入文件?你能提供一个样本输出,你认为应该如何存储?也许文件中每行一项?它需要是二进制文件吗?