5

Uso VS2013. L'intero programma è C, non C++.L'utilizzo di inizializzatori designati per l'inizializzazione di un inizializzatore di array char 2D in una struttura emette un errore C2078 in VS2013

posso inizializzare un "array di stringhe" come questo senza problemi:

char titles[4][80] = { "Dad", "Idiot", "Donut Lover", "Fewl" }; // OK! 

ho una struct dichiarato come questo:

typedef struct 
{ 
    char name[80]; 
    char titles[4][80]; 
} Dude; 

Quando cerco di inizializzare la struct come questo :

Dude homer = 
{ 
    .name = "Homer", 
    .titles = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

Ottengo un "errore C2078: troppi inizializzatori". Ciò è dovuto all'inizializzazione dell'array. Se rimuovo la riga .titles = { ..., l'errore scompare. Perché ricevo questo errore? Esiste un modo diverso per eseguire questo tipo di inizializzazione delle stringhe all'interno di un inizializzatore di struct?

Se cambio la dichiarazione della struct a guardare come questo

typedef struct 
{ 
    char name[80]; 
    char *titles[4]; 
} Dude; 

l'errore va via. Questo, tuttavia, non è un cambiamento che posso apportare. Altre parti del codice richiedono che la dimensione di questa struttura sia esattamente 400 byte.

Inoltre, sono abbastanza consapevole che potrei usare strcpy per compilare ciascun campo, ma che non risponde alla mia domanda.

+2

provare 'Amico homer = { "Omero" , {"Papà", "Idiota", "Donut Lover", "Fewl"} }; ' – BLUEPIXY

+2

AFAIK, VS2013 utilizza C89 e C89 non supporta l'uso di' {.item = ...} '. (Non c'è un qualche tipo di nome per questo?). GCC fornisce un avvertimento: ISO C90 vieta di specificare subobject per inizializzare [-Wpedantic] 'che mostra che non è supportato in C89. –

+0

Io uso i blocchi di codice per compilare ed è ok. Immagino sia il problema VS. Ho aggiornato la tua domanda per includere i tag 'VS' e' VS2013' – Ian

risposta

0

In C, è più facile per fare questo:

Dude homer = 
{ 
    "Homer", 
    { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

Non so se questo funziona, ma si può provare:

Dude homer = 
{ 
    .name = "Homer", 
    .titles[] = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
};