Массивы нулевой длины технически не поддерживаются стандартом C. Однако некоторые компиляторы, такие как gcc, допускают их как расширение.
Это способ создания гибких элементов массива до C99, как показано здесь:
typedef struct {
int len;
int contents[0];
} arr;
Затем вы можете инициализировать столько места, сколько захотите для массива в конце:
arr* a = malloc(sizeof(*a) + sizeof(a->contents) * 10); /* for a length-10 array */
a->len = 10;