Penso che quello che si intende è:
struct foo {
... some data members, maybe the length of bar ...
char bar[]; /* last member of foo, char is just an example */
};
Viene utilizzato allocando con malloc(sizeof(struct foo)+LEN)
, dove LEN è la lunghezza desiderata di bar
. In questo modo è necessario solo un malloc. []
può essere utilizzato solo con l'ultimo membro della struttura.
E, per quanto comprendo il documento GCC, struct foo
può essere utilizzato (ragionevolmente) solo come ultimo membro di un'altra struttura, poiché la dimensione di archiviazione non è fissa, o come puntatore.
Come altri hanno commentato alcune risposte qui sotto, avresti miglior fortuna nella ricerca di _flexible array member_. – ninjalj
Si noti che, per definizione rigorosa, ciò richiama _UB_: http://stackoverflow.com/questions/3711233/is-the-struct-hack-technically-undefined-behavior – sbi