c - 在C中将嵌套结构写入磁盘

标签 c serialization

所以我有一个看起来像这样的结构(或多或少):

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/

相关文章:

Java,Socket : Send several object of an arrayList one by one, objectInputStream 没有全部读取

c++ - 动态内存分配给 char 数组

c - 错误的 printf 参数数量导致奇怪的结果

c# - 使用 JSON.NET 进行序列化时,使自定义 JsonConverter 尊重 ItemTypeNameHandling

python - 搁置:数据库的选择

python-3.x - Protobuf 运行时警告 : Unexpected end-group tag Not all data was converted

C 中 system() 的 CTRL+C 无法识别

计算 C 中整数的个数

c - 链表递归反向函数的问题

c# - Json Serialize Dictionary<Enum, Int32> 的问题