que tienen la siguiente estructuraCómo inicializar una estructura con un miembro de matriz flexible de
typedef struct _person {
int age;
char sex;
char name[];
}person;
he hecho un poco de búsqueda de Internet básico (pero sin éxito) sobre cómo crear una instancia e inicializar una estructura con un miembro de la matriz flexibles sin usar malloc()
.
Por ejemplo: para estructuras normales como
struct a {
int age;
int sex;
};
Podemos crear una instancia de struct a
y inicializarlo como
struct a p1 = {10, 'm'};
Pero para estructuras con array flexibles en él (como _person
como se mencionó anteriormente) ¿cómo podemos crear una instancia e inicializar como lo hacemos para structures
normal?
¿Es posible? Si es así, ¿cómo pasamos el tamaño de la matriz durante la inicialización y el valor real para inicializar?
(o)
¿Es cierto que la única manera de crear una estructura con arreglo flexible está utilizando malloc()
como se menciona en la especificación C99 - 6.7.2.1 Structure and union specifiers - point #17
?!
no puede, struct debe tener el tamaño de compilación. – Anycorn
@Anycorn: las estructuras con miembros de matriz flexibles tienen un tamaño de tiempo de compilación. –
GCC tiene una extensión que le permite hacer algo como 'struct {size_t len; int datos []; } x = {4, {1, 2, 3, 4}}; 'y funcionará, pero no es portátil. Siempre puedes mirar la versión de su plataforma de 'alloca' para una solución posiblemente más portátil, pero debes asegurarte de que todos se comporten de la misma manera y tengan las mismas peculiaridades de implementación. –