Dichiarazione di array di caratteri e inizializzazione in C

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.