Programación General > C/C++
Error al imprimir un campo de un registro, devuelve "ZERO"
huevofritopamojarpan:
Gracias de nuevo tío. :good:
Entiendo lo que dices. Modifiqué y ahora tengo la función así:
--- Código: C ---// Inicializar usuarios. Carga los usuarios del archivo de texto en un array.int usuarios_inicializar(tipo_usuario **lista_usuarios){ //Memoria dinámica!!!!!! unsigned short int i; char *aux, linea[128]; FILE *archivo_usuarios; archivo_usuarios=fopen("usuarios.dat","r"); //Comprobar que existe el archivo fscanf(archivo_usuarios,"%d",&i); printf("n%p", *lista_usuarios); *lista_usuarios=(tipo_usuario*)malloc(i*sizeof(tipo_usuario)); printf("n%p", *lista_usuarios); fscanf(archivo_usuarios,"%c",linea);//para leer el salto de línea i=0; while(fgetc(archivo_usuarios)!=EOF) { fseek(archivo_usuarios,-1,SEEK_CUR); fgets(linea,128,archivo_usuarios); //login aux=strtok(linea,":"); strcpy((*(lista_usuarios)+i)->login,aux); //password aux=aux+strlen((*(lista_usuarios)+i)->login)+1; aux=strtok(aux,":"); strcpy((*(lista_usuarios)+i)->password,aux); //nombre aux=aux+strlen((*(lista_usuarios)+i)->password)+1; aux=strtok(aux,":"); strcpy((*(lista_usuarios)+i)->nombre,aux); //apellido aux=aux+strlen((*(lista_usuarios)+i)->nombre)+1; aux=strtok(aux,":"); strcpy((*(lista_usuarios)+i)->apellido,aux); //extensión aux=aux+strlen((*(lista_usuarios)+i)->apellido)+1; aux=strtok(aux,":"); strcpy((*(lista_usuarios)+i)->ext,aux); i++; (*(lista_usuarios)+i)->activo=1; printf("n%s %s",(*lista_usuarios+i)->nombre, (*lista_usuarios+i)->apellido); } fclose(archivo_usuarios); return i;} E invoco la función así:
--- Código: C ---usuarios_size=usuarios_inicializar(&lista_usuarios);
Pero esta línea, printf("n%s %s",(*lista_usuarios+i)->nombre, (*lista_usuarios+i)->apellido); , no muestra nada.
¿Sigo fallando en algo?
Eternal Idol:
No se, tendria que depurarlo (o analizarlo pero soy muy vago) pero no tengo el reservas.dat, fijate si podes depurarlo vos.
huevofritopamojarpan:
La madre que me parió... Ahora tengo otro problema. Será otra estupidez, pero no la veo. :wacko:
Adjunto el código por si el error viene de otro lado.
Explico el error: Dentro de la función usuarios_inicializar llamo a la función usuario_cpy. Ahí esta el error (Bus error), porque si comento esta linea el error desaparece.
Al ejecutar gdb (todavía no sé utilizarlo bien), el error me sale en otro lado, en un strlen(), que hasta ahora funcionaba sin problemas.
Joer, cada vez estoy más desesperado :argh:
Ayuda, please!
Eternal Idol:
El primer problema que tengo es que fseek no funciona, puse esto:
--- Código: Text ---for (char x = fgetc(archivo_usuarios); x != EOF; x = fgetc(archivo_usuarios)){ ungetc(x, archivo_usuarios);
Y ahora el problema es que en el archivo no hay "extensión" (despues del apellido viene otro usuario).
Y sacando el * que no hace falta aca ya imprimo los logins al menos:
--- Código: Text ---printf("nLogin:%s",(lista_usuarios+log)->login);
Desde ahi segui vos :comp:
PD.Donde comparas un caracter contra una cadena esta mal, ejemplo:
if ((i=="S")
tiene que ser
if ((i=='S')
if (*lista_usuarios==NULL) printf("me cago en la puta"); :D
huevofritopamojarpan:
Joder tío, mil gracias! He cambiado eso pero sigo teniendo el mismo error. El error no viene de fseek, sino de un strlen.
Subo una captura de la terminal pa que veas. Estoy leyendo un manual de gdb, que no sé hacer prácticamente nada con él (avanzar línea y poco más :P ).
Bueno, sigo investigando...
Agur!
PD: Que dios te pague la ayuda que prestas con pocos hijos y muchos intentos...
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa