C 标准在技术上不支持零长度数组。然而,一些编译器(例如 gcc)允许它们作为扩展。
它们是 C99 之前创建灵活数组成员的方法,如下所示:
typedef struct {
int len;
int contents[0];
} arr;
Run Code Online (Sandbox Code Playgroud)
然后,您可以在末尾为数组初始化尽可能多的空间:
arr* a = malloc(sizeof(*a) + sizeof(a->contents) * 10); /* for a length-10 array */
a->len = 10;
Run Code Online (Sandbox Code Playgroud)