ho la seguente strutturaCome inizializzare una struttura con membro di matrice flessibile
typedef struct _person {
int age;
char sex;
char name[];
}person;
Ho fatto qualche ricerca su Internet di base (ma senza successo) su come creare un'istanza e inizializzare una struttura con un membro di matrice flessibile senza usare malloc()
.
Ad esempio: per strutture normali come
struct a {
int age;
int sex;
};
Possiamo creare un'istanza di struct a
e inizializzarlo come
struct a p1 = {10, 'm'};
Ma per strutture con matrice flessibile in esso (come _person
come menzionato sopra) come possiamo creare un'istanza e inizializzarla come lo facciamo per il normale structures
?
È possibile? In tal caso, come si passa la dimensione dell'array durante l'inizializzazione e il valore effettivo da inizializzare?
(o)
E 'vero che l'unico modo per creare una struttura con matrice flessibile sta usando malloc()
come indicato nella specifica C99 - 6.7.2.1 Structure and union specifiers - point #17
?!
impossibile, struct deve avere dimensioni di compilazione. – Anycorn
@Anycorn: le strutture con membri di array flessibili hanno una dimensione temporale di compilazione. –
GCC ha un'estensione che ti permette di fare qualcosa come 'struct {size_t len; dati int []; } x = {4, {1, 2, 3, 4}}; 'e funzionerà, ma non è portatile. Puoi sempre cercare nella versione della piattaforma di 'alloca' una soluzione probabilmente più portabile, ma dovresti assicurarti che tutti si comportino allo stesso modo e abbiano le stesse stranezze di implementazione. –