gpt4 book ai didi

C 中具有多个灵活数组成员的案例?

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:29 25 4
gpt4 key购买 nike

问题:我通过网络接收动态大小的结构并将其存储在磁盘上。现在我想提供函数来处理这个连续的内存块。

例子:下面当然不行,只是一个例子:

typedef struct person {
size_t name_size;
const char name[];
} person;

typedef struct group {
size_t caption_size;
const char caption[];
size_t group_size;
person people[];
} group;

person *group_get_people(const group *g);
const char *person_get_name(const person *p);
size_t person_get_name_size(const person *p);
...

要求:API 应该有类型,所以很清楚要传递什么,如果传递了错误的类型,编译器应该发出警告。

我尝试了什么:我目前正在考虑 typedef person void;,并且只计算实现中的偏移量。但是,如果传递了错误的类型,编译器不会发出警告。

问题:我如何表示这样的数据结构?最常用的方法是什么?

最佳答案

您不能在 C 中用类型安全表示条件内存布局,但您可以提供类型安全的指针包装器作为结构,并将指针作为单个成员。类似的东西:

typedef struct group_ptr {
void* p;
} group_ptr;

typedef struct person_ptr {
void* p;
} person_ptr;

person_ptr group_get_person(group_ptr g, size_t i);

不幸的是,除了添加更多类(如 const_group_ptrconst_person_ptr)之外,我没有看到处理常量性的简单方法。

关于C 中具有多个灵活数组成员的案例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com