es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El \376 es muy probablemente debido a un comportamiento indefinido causado por el uso de memoria no inicializada. Cuando verbe[] y radical[] se declaran sin inicialización, sus contenidos son indefinidos, lo que significa que pueden contener cualquier valor. En este caso, es posible que radical[] contenga algún valor basura que está causando que se imprima el carácter inesperado.

    Inicializar verbe[] y radical[] 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.

Comments are closed.