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

¿Por qué falla este simple puntero?

Estas en el tema de ¿Por qué falla este simple puntero? en el foro de C/C++ en Foros del Web. Buenas. Esto es parte de un bucle, y quiero almacenar en cada pasada nombre[256]. Como no sé el número de nombres uso un puntero, pero ...
  #1 (permalink)  
Antiguo 15/02/2011, 07:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
¿Por qué falla este simple puntero?

Buenas.

Esto es parte de un bucle, y quiero almacenar en cada pasada nombre[256]. Como no sé el número de nombres uso un puntero, pero no tengo ni idea de por qué falla. Creo entender el funcionamiento de los punteros, y pienso que cap=nombre asigna a cap la dirección del primer elemento de nombre, y cap++ aumenta su dirección para la siguiente pasada. Lo que pongo compila pero no muestra lo que quiero.

Código:
     int n=0;
     char *cap;
     FILE *fichero;
     char cadena_e[256], nombre[256];

     fgets(cadena_e,256,fichero);

     while (cadena_e[n] != ',') 
     {
                 nombre[n-3] = cadena_e[n];
                 n++;
     }

     cap=nombre;
     cap++;

     printf("%s",*cap);   /*No tengo claro si aquí se pone %s o %p o ambos valen*/
     Sleep (1000);
Saludos y gracias.
  #2 (permalink)  
Antiguo 15/02/2011, 07:27
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: ¿Por qué falla este simple puntero?

Para empezar, estás accediendo a la posición -3 de nombre (y a la -2 y a la -1) por lo que a saber que se está guardando ahí.

¿Que es lo que quieres que te salga y que te sale? ¿Has probado a depurar?
  #3 (permalink)  
Antiguo 15/02/2011, 08:22
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ¿Por qué falla este simple puntero?

Perdona que ha sido un copy-paste y me he equivocado. La inicialización es int n=3, porque siempre que captura cadena_e se tienen tres espacios al comienzo de una línea.

Tenía un código probado y que funciona con todo eso bien compilado. El error me aparece cuando integro la parte del puntero en el código.

Corrijo eso y otro fallo que he visto producto del copy-paste:

Código:
     int n=3;
     char *cap;
     FILE *fichero;
     char cadena_e[256], nombre[256];

     fgets(cadena_e,256,fichero);

     while (cadena_e[n] != ',') 
     {
                 nombre[n-3] = cadena_e[n];
                 n++;
     }

     cap=nombre;

     printf("%s",*cap);   /*No tengo claro si aquí se pone %s o %p o ambos valen*/
     Sleep (1000);

     cap++;
Todo esto es un bucle que se va repitiendo (la parte de variables la he puesto para que veáis de que se trata).

Lo que quiero es tener el puntero con cada nombre en una dirección, y uso el printf como un modo de depurar, viendo por pantalla si me lo hace bien, pero no sale nada, se queda colgado (el programa en sí no requiere del printf).

Saludos y gracias.
  #4 (permalink)  
Antiguo 15/02/2011, 09:07
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: ¿Por qué falla este simple puntero?

Si se queda colgado muy posiblemente es porque entre en un bucle infinito el WHILE, yo podría dentro del WHILE un printf para que veas que es lo que está cogiendo en cada momento.
  #5 (permalink)  
Antiguo 23/02/2011, 09:38
 
Fecha de Ingreso: enero-2005
Mensajes: 93
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: ¿Por qué falla este simple puntero?

Hola, tal vez sea un poco tarde para responder, pero por si acaso aun te vale...
Tal vez el problema sea que no cierras el string con un 0, es decir, el último caracter de una cadena debe ser 0.
Prueba a poner antes del printf
nombre[n]=0;

Si no te funciona prueba a poner cap en lugar de *cap en el printf (hace mucho que no uso c y no estoy seguro, pero por probar...)
__________________
أת٥ד ﻪو٧٤ ٣أﮐ

Etiquetas: falla, puntero, simple
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 10:11.