c - 我们如何创建一个结构数组,它的最后一个字段是灵活数组?
问题描述
假设我们有:
struct A {
int i;
char c[1];
};
通常我会malloc()
用来创建 A 的实例,例如:
#define LEN 10
struct A *my_A = malloc(sizeof(A) + LEN * sizeof(char));
但是,如果我尝试创建一个 A 数组,这将不起作用
解决方案
具有灵活数组成员的 Astruct
不能是数组的成员。这在C 标准的第 6.7.2.1p3 节中明确说明:
结构或联合不应包含不完整或函数类型的成员(因此,结构不应包含自身的实例,但可能包含指向自身实例的指针),但结构的最后一个成员具有超过一个命名成员可能有不完整的数组类型; 这样的结构(以及任何可能递归地包含此类结构的成员的联合)不应是结构的成员或数组的元素。
您需要做的是使用指针而不是灵活的数组成员声明结构,并为每个实例分配空间。
例如:
struct A {
int i;
char *c;
};
struct A arr[100];
for (int i=0; i<100; i++) {
arr[i].c = malloc(LEN);
}
推荐阅读
- ffmpeg - 附加两个视频而不复制 FFMPEG
- laravel - Route Laravel 8 缺少必需的参数
- arrays - 提取相对于0值的时间,求一天中的多个工作时间,在MongoDB数组操作中
- android - RecyclerView 不显示数据库片段中的数据
- typescript - 使用类型作为函数
- python - Flask-limiter - 在 redis 中添加自定义键名
- soap - 如何通过 SOAP 调用 NetSuite SuiteScript - Ballerina Lang
- javascript - 如何使用引导程序从 datepicker 获取日期并在另一个 div 中显示日期
- flutter - 颤振:未定义的名称“上下文”
- liquibase - Liquibase:如何使用
变更集具有 runAlways true?