Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Las cadenas en C y sus extraños comportamientos...

Estas en el tema de Las cadenas en C y sus extraños comportamientos... en el foro de C/C++ en Foros del Web. 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] ...
  #1 (permalink)  
Antiguo 18/03/2011, 14:59
Avatar de Stoyicker  
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
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");
}
  #2 (permalink)  
Antiguo 18/03/2011, 18:52
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Las cadenas en C y sus extraños comportamientos...

El error es el siguiente. strlen te devuelve la cantidad de caracteres que hay hasta el caracter de fin de cadena ('\0'); seguramente eso esta fallando.

prueba asignar asi:
ultimorecibido[4] = '\0';

a ver que sale...
  #3 (permalink)  
Antiguo 18/03/2011, 18:54
Avatar de Stoyicker  
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Las cadenas en C y sus extraños comportamientos...

Sí puede ser, voy a comprobarlo y si veo que funciona, pongo que se le concatene al mensaje el carácter '\0' antes de salir del cliente, porque si no el servidor se volverá loco xD

gracias!
  #4 (permalink)  
Antiguo 19/03/2011, 15:18
 
Fecha de Ingreso: marzo-2011
Mensajes: 13
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Las cadenas en C y sus extraños comportamientos...

la ultima posición del vector tienes que hacer lo que te dicen meter el caracter nulo para que la cadena quede finalizada.

Etiquetas: cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:46.