Creo que lo que se quiere decir es:
struct foo {
... some data members, maybe the length of bar ...
char bar[]; /* last member of foo, char is just an example */
};
Se utiliza asignando con malloc(sizeof(struct foo)+LEN)
, donde LEN es la longitud deseada de bar
. De esta forma, solo se necesita malloc. El []
solo se puede usar con el último miembro de la estructura.
Y, tan pronto como entiendo el documento de GCC, struct foo
también puede usarse (razonablemente) como último miembro de otra estructura, porque el tamaño de almacenamiento no es fijo, o como puntero.
Como otros han comentado algunas de las respuestas a continuación, tendrías más suerte buscando _flexible array member_. – ninjalj
Tenga en cuenta que, por definición estricta, esto invoca _UB_: http://stackoverflow.com/questions/3711233/is-the-struct-hack-technically-undefined-behavior – sbi