si escribo:Inicialización matriz de caracteres con la cadena más pequeña literal
char arr[8] = "abc";
¿Hay alguna especificación más de lo que podría ser arr[4]
? Hice algunas pruebas con Clang y parece que los caracteres restantes en la matriz se establecen en nulo. Además, char arr[8] = "";
pone a cero cada byte. No estoy seguro si esto es un compilador conveniencia, comportamiento estándar, pura coincidencia o me equivoqué.
void a()
{
char arr[8] = "abc"; /* breakpoint here, line 3 */
strcpy(arr, "1234567");
}
int main()
{
a();
a();
return 0;
}
depurador transcripción:
Breakpoint 1, a() at str.c:3 3 char arr[8] = "abc"; (gdb) s Current language: auto; currently minimal 4 strcpy(arr, "1234567"); (gdb) p arr $1 = "abc\000\000\000\000" (gdb) c Continuing. Breakpoint 1, a() at str.c:3 3 char arr[8] = "abc"; (gdb) p arr $2 = "1234567" (gdb) s 4 strcpy(arr, "1234567"); (gdb) p arr $3 = "abc\000\000\000\000"
@Lundin - en realidad, arr [3] se establece en NULL de terminación, por lo que tiene razón para preguntar acerca de matriz [4] –
@JamesCaccese parece ser un error tipográfico ... de todos modos, todo se explica en la respuesta que publiqué. – Lundin
@Lundin - ¿Quién es Typo, Your's o @ sidyll's? Su comentario anterior que arr [4] se establece en terminación nula debido a que "" es falso. arr [3] se establece en terminación nula debido a "", arr [4] se pone a cero porque no se inicializó explícitamente. Su respuesta a continuación es correcta, pero su comentario está desactivado y confunde el problema. Como no puede editar comentarios, probablemente debería eliminarlos. –