我在C程序中有一个复杂的结构,它有许多动态分配内存的成员。如何将此结构写入文本/二进制文件?如何从文件读取的数据中重新创建整个结构。
struct parseinfo{
int varcount;
int termcount;
char **variables;
char **terminals;
char ***actions;
};
成员变量,终端和动作都是动态分配的,我需要将这个结构写入文件,以便以后重构结构。
答案 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字符? ?)
您希望如何将其写入文件?你能提供一个样本输出,你认为应该如何存储?也许文件中每行一项?它需要是二进制文件吗?