¿Por qué la declaración de múltiples matrices de cadenas en una línea causa que los valores inicializados se arruinen?
Estoy declarando dos arreglos en mi código sin inicializarlos:
char verbe[27],
radical[27],
termi[6][4] = { "e", "es", "e", "ons", "ez", "ent" },
pronom[6][10] = { "Je", "Tu", "Il/elle", "Nous", "Vous", "Ils/elles" };
printf(“entrer un verbe\n”);
scanf(“%s”, verbe);
strncpy(radical, verbe, strlen(verbe)-2);
for (int i = 0; i < 6; i++) {
printf(“%s”, pronom[i]);
printf(” %s”, radical);
printf(“%s”, termi[i]);
printf(“\n”);
}
cuando mi entrada para verbe[] es "manger", imprime:
Je mang\376e
Tu mang\376es
Il/elle mang\376e
Nous mang\376ons
Vous mang\376ez
Ils/elles mang\376ent
No puedo entender de dónde proviene ese "\376" ya que se supone que lo imprimirá.
Si inicializo verbe[] y radical[] como vacíos, imprime el resultado correcto que es:
Je mange
Tu manges
Il/elle mange
Nous mangons
Vous mangez
Ils/elles mangent
“`
davy.ai
El
\376
es muy probablemente debido a un comportamiento indefinido causado por el uso de memoria no inicializada. Cuandoverbe[]
yradical[]
se declaran sin inicialización, sus contenidos son indefinidos, lo que significa que pueden contener cualquier valor. En este caso, es posible queradical[]
contenga algún valor basura que está causando que se imprima el carácter inesperado.Inicializar
verbe[]
yradical[]
como cadenas vacías (""
) asegura que contengan valores predecibles y válidos, y así se elimina el comportamiento indefinido. Esto permite que el programa produzca la salida esperada.