所以我有一个看起来像这样的结构(或多或少):
typedef struct AST_STRUCT
{
enum {
AST_OBJECT,
AST_REFERENCE,
AST_VARIABLE,
AST_VARIABLE_DEFINITION,
AST_VARIABLE_ASSIGNMENT,
AST_VARIABLE_MODIFIER,
AST_FUNCTION_DEFINITION,
AST_FUNCTION_CALL,
AST_NULL,
AST_STRING,
AST_CHAR,
AST_FLOAT,
AST_LIST,
AST_BOOLEAN,
AST_INTEGER,
AST_COMPOUND,
AST_TYPE,
AST_BINOP,
AST_NOOP,
AST_BREAK,
AST_RETURN,
AST_IF,
AST_ELSE,
AST_WHILE,
AST_ATTRIBUTE_ACCESS,
AST_LIST_ACCESS,
AST_NEW
} type;
struct AST_STRUCT* variable_value;
}
现在我想将这个结构体序列化到磁盘上,写入 .dat
文件中。
问题是,正如您所看到的,它有一个名为 variable_value
的字段。
我正在使用此函数将其写入磁盘: https://www.geeksforgeeks.org/readwrite-structure-file-c/
我还使用该文章中的其他函数从磁盘读取它。
结构上的 variable_value
字段似乎未正确加载。
如何将整个结构写入磁盘并维护 variable_value
字段的数据?
我首先考虑将 variable_value
字段转储到一个单独的文件中,然后在加载它后将其“链接回”到结构中,但也许还有另一种方法可以做到这一点?
最佳答案
您正在尝试序列化链接结构(我假设是一棵树,来自名称“AST”)。
如果我们想象一下,您成功地做到了这一点并将其写入磁盘,那么当您将其加载回来时,您将为树中的链接分配内存,但这些内存块的地址(指针值)不保证与旧的相同。您将无法重建树。
因此您不能使用地址值作为磁盘上的链接。您需要使用其他方法。如今,流行的方法是 JSON格式,假设您在树中没有交叉链接或反向链接,该格式将适用于您。
所以您需要一个 JSON C 库。我从未使用过,但以下是我在 2 秒内找到的几个:
关于c - 在C中将嵌套结构写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951134/