Declaración e inicialización de matriz de caracteres en C

Declaración e inicialización de matriz de caracteres en C


Tenía curiosidad acerca de por qué esto no está permitido en C:


char myarray[4];
myarray = "abc";

Y esto está permitido:


char myarray[4] = "abc";

Sé que en el primer caso debería usar strcpy :


char myarray[4];
strcpy(myarray, "abc");

Pero, ¿por qué no se permite la declaración y posterior inicialización y sí la declaración y la inicialización simultáneas? ¿Se relaciona con el mapeo de memoria de programas C?


¡Gracias!


Respuestas:


Eso se debe a que su primer fragmento de código no realiza la inicialización , pero asignación :


char myarray[4] = "abc";  // Initialization.
myarray = "abc"; // Assignment.

Y las matrices no se pueden asignar directamente en C.


El nombre myarray en realidad se resuelve en la dirección de su primer elemento (&myarray[0] ), que no es un valor l y, como tal, no puede ser el objetivo de una asignación.