Come posso definire e inizializzare un array di stringhe all’interno di una struct?

typedef struct mobiltelefon { char herstellername[HLEN]; double displaydiagonale; aufloesung_t aufloesung; char standards[NUMBER_OF_STRINGS][STRINGLENGTH+1] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}; } telefon_t; 

Continuo a ricevere un errore expected ; at the end of declaration list expected ; at the end of declaration list .

Modificare

 char (*standards[6])[5] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

a

 char standards[6][6] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

Un rapido esempio:

 #include  int main(int argc, char *argv[]) { int i; char standards[6][6] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; for(i=0;i<6;i++) printf("%s\n",standards[i]); return 0; } 

Si noti che gli char standards[6][5] sono corretti perché la stringa più lunga dell'array 2D è HSDPA e HSUPA che è di lunghezza 5, per terminare il carattere '\0' sarà necessario un altro byte.

puoi usare gli array 2D se conosci la lunghezza massima delle stringhe che inserirai, ad esempio se sappiamo che nessuna stringa sarà lunga più di 4 caratteri quindi basta

 char arr[6][5] = {"GPRS" , "EDGE" , "HSDPA" , ...}; 

un modo migliore per farlo è

 char *arr[] = { "GPRS" , "EDGE" , "HSPDA"} 

in questo modo non devi preoccuparti della lunghezza delle stringhe o di quante stringhe puoi aggiungere

Un modo per inizializzare una serie di stringhe è:

 char *standards[] = {"GPRS", ...}; 

Non devi passare il numero di stringhe, il compilatore lo capirà.

Le variabili in una struttura non possono essere inizializzate. Gli standard applicabili non possono essere inizializzati all’interno della struttura.

Rimuovi il * e il {}. Cambia questo:

 char (*standards[6])[5] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

A questo:

 char standards[6][6] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}; 

Alla struttura:

Non puoi inizializzare un membro struct all’interno della sua dichiarazione. Devi fare qualcosa del genere:

 typedef struct mobiltelefon { char herstellername[HLEN]; double displaydiagonale; aufloesung_t aufloesung; char standards[NUMBER_OF_STRINGS][STRINGLENGTH+1]; } telefon_t; 

E l’inizializzazione della variabile come questa (solo C99 / C11):

 telefon_t iphone = {.standards = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}}; 

O con memcpy:

 memcpy(iphone.standards[0], "GPRS", 5); memcpy(iphone.standards[1], "EDGE", 5); memcpy(iphone.standards[2], "HSDPA", 6); memcpy(iphone.standards[3], "HSUPA", 6); memcpy(iphone.standards[4], "HSPA", 5); memcpy(iphone.standards[5], "LTE", 4); 

Ma questo è uno spreco di spazio, se ogni telefono ha gli stessi standard preferirei andare con una variabile globale:

 char teleon_standards[6][6] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"};