In Absatz 18 von 6.7.2.1 beschreibt die Norm (Entwurf N1570) sie:
Als Sonderfall kann das letzte Element einer Struktur mit mehr als einem benannten Element einen unvollständigen Array-Typ haben; Dies wird als flexibles Array-Member bezeichnet. In den meisten Situationen wird das flexible Arraymitglied ignoriert. Insbesondere ist die Größe der Struktur so, als ob das flexible Anordnungselement weggelassen worden wäre, außer dass es mehr nachlaufende Polsterung aufweisen kann, als das Weglassen implizieren würde. Wenn jedoch a . (oder ->) Operator einen linken Operanden hat, der (ein Zeiger auf) eine Struktur mit einem flexiblen Array-Mitglied ist, und der rechte Operand dieses Mitglied benennt, verhält er sich so, als ob dieses Mitglied durch das längste Array (mit demselben Elementtyp) ersetzt würde, das dies nicht tun würde die Struktur größer machen als das Objekt, auf das zugegriffen wird; der Versatz des Arrays muss der des flexiblen Array-Elements bleiben, auch wenn dieser von dem des Ersatz-Arrays abweichen würde. Wenn dieses Array keine Elemente hätte, verhält es sich so, als hätte es ein Element, aber das Verhalten ist undefiniert, wenn versucht wird, auf dieses Element zuzugreifen oder einen Zeiger darüber hinaus zu generieren.
Es ist ein gängiger C-Hack, ein Array mit variabler Länge zu deklarieren (wobei Sie die Größe zum Zeitpunkt der Zuweisung definieren
Beispiel:
struct line {
int length;
char contents[0];
};
struct line *thisline = (struct line *)
malloc (sizeof (struct line) + this_length);
thisline->length = this_length;
Auf diese Weise haben Sie eine Strukturdefinition Ihrer Daten, die auch die Array-Länge für offensichtliche Bequemlichkeitszwecke speichert, aber Sie sind nicht durch die feste Größe eingeschränkt, die normalerweise mit einer Struktur verbunden ist
Beispiel entnommen aus hier (da sind auch mehr Infos drin)
14066700cookie-checkWas ist der Zweck eines Arrays der Länge Null in einer Struktur? [duplicate]yes
Ich denke, das bedeutet ein Array der Länge Null, ich denke, es bedeutet, dass der erste Wert des Arrays abgerufen oder abgerufen wird.
– Ryan Fung
31. Juli 2012 um 5:58 Uhr
gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
– Neo
31. Juli 2012 um 5:59 Uhr