Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/03/2011, 14:59
Avatar de Stoyicker
Stoyicker
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 9 meses
Puntos: 1
Las cadenas en C y sus extraños comportamientos...

Buenas, tengo éste trozo de código:

char ultimorecibido[M];

ultimorecibido[0] = '9';
printf("Cadena cuando hay uno: ");printv(ultimorecibido);
ultimorecibido[1] = '1';
printf("Cadena cuando hay dos: ");printv(ultimorecibido);
ultimorecibido[2] = '0';
printf("Cadena cuando hay tres: ");printv(ultimorecibido);
ultimorecibido[3] = '4';
printf("Cadena recien formada: ");printv(ultimorecibido);

donde M es una constante definida como 1000y printv es una función implementada por mí que imprime un vector de caracteres, evitándome tener que hacer un for para cada caso.

Si se pone éste trozo en la main de un archivo en C, y se ejecuta, la salida es:

Cadena cuando hay uno: 9
Cadena cuando hay dos: 91
Cadena cuando hay tres: 910
Cadena recien formada: 9104hË(

¿Por qué no es la siguiente:?

Cadena cuando hay uno: 9
Cadena cuando hay dos: 91
Cadena cuando hay tres: 910
Cadena recien formada: 9104

Más información: Si sólo se dan valores a los íncides 0, 1 y 2, el resultado es el de esperar:

Cadena cuando hay uno: 9
Cadena cuando hay dos: 91
Cadena recien formada: 910

Para el que piense que el error está en la función printv, creo que puedo garantizar que no, pero la pongo por si acaso:

void printv(char v[]) {
int i;
for (i = 0; i < strlen(v); i++)
printf("%c", v[i]);
printf("\n");
}