Dichiarazione di array di caratteri e inizializzazione in C
Ero curioso di sapere perché questo non è consentito in C:
char myarray[4];
myarray = "abc";
E questo è consentito:
char myarray[4] = "abc";
So che nel primo caso dovrei usare strcpy :
char myarray[4];
strcpy(myarray, "abc");
Ma perché la dichiarazione e l'inizializzazione successiva non sono consentite e sono consentite la dichiarazione e l'inizializzazione simultanea? Si riferisce alla mappatura della memoria dei programmi C?
Grazie!
Risposte:
Questo perché il tuo primo snippet di codice non esegue l'inizializzazione , ma incarico :
char myarray[4] = "abc"; // Initialization.
myarray = "abc"; // Assignment.
E gli array non sono direttamente assegnabili in C.
Il nome myarray
si risolve effettivamente all'indirizzo del suo primo elemento (&myarray[0]
), che non è un lvalue, e come tale non può essere l'obiettivo di un'assegnazione.