Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: samur88 en 9 Mayo 2011, 17:34 pm



Título: Cargar Lista de un fichero con fseek a una lista auxiliar en el programa.
Publicado por: samur88 en 9 Mayo 2011, 17:34 pm
Hola buenas.

Tengo el siguiente problema que no consigo resolver y por mas que busco en el foro y en Internet no encuentro la forma de solucionarlo.

Tengo una lista en un fichero que previamente he insertado con fwrite, lo que quiero hacer es leer la lista de ese fichero con fseek y cargarla en una lista auxiliar para que el programa trabaje con ella (por ejemplo insertar datos) luego volvere a escribir el fichero entero y cada vez que quiera escribir en esa lista, la cargare en una auxiliar y trabajare con ella para volverla a guardar en el programa.

La función que he hecho para esto, es la siguiente:


Código
  1. medicos * read_fic(void){
  2. FILE *fp;
  3. medicos *aux,aux2,*first;
  4. fp = fopen("medicos.bin","r+b");
  5. fseek (fp, 0L, SEEK_SET);
  6. first = NULL;
  7.  
  8. do{
  9.   fread(&aux2,sizeof(medicos),1,fp);
  10.   aux = (medicos *)malloc(sizeof(medicos));
  11.  
  12.   if(first == NULL){first = aux;}
  13.   aux->dni = aux2.dni;
  14.   aux->fecha = aux2.fecha;
  15.   strcpy(aux->nombre,aux2.nombre);
  16.   strcpy(aux->apellidos,aux2.apellidos);
  17.  
  18.   /* sacar datos de una estructura dentro de una lista dentro de un fichero */
  19.  
  20.   strcpy(aux->direccion.calle,aux2.direccion.calle);
  21.   aux->direccion.bloque = aux2.direccion.bloque;
  22.   aux->direccion.numero = aux2.direccion.numero;
  23.  
  24.   aux->next = aux2.next;
  25.   /*
  26.    printf("#%d \t Fecha: %d",aux->dni, aux->fecha);
  27.    printf("\t#N: %s \t A: %s\t",aux->nombre, aux->apellidos);
  28.    printf("Calle: %s\n",aux->direccion.calle);
  29.    
  30.    
  31.    */
  32.   aux = aux->next;
  33.  }while(!feof(fp)); // (aux2.next != NULL);
  34.  
  35. fclose(fp);
  36. return first;
  37. }


El main quedaría así:
Código
  1. int main(){
  2.    medicos *primero;
  3.    primero = NULL;
  4.  
  5.   primero = read_fic();
  6. }

Pero esta función me da fallos de segmentación por todos lados, a parte de que estoy usando un puntero local a la función, por lo tanto el valor de aux se debería perder cuando retorne first que es un puntero al primer elemento de dicha lista, como resolvería este problema sin usar variables globales (por ejemplo haciendo que aux2 sea global).
De todas formas puede que tenga mas fallos a parte de ese, la función con la que cargo los datos del fichero en la lista.

Un saludo.


Título: Re: Cargar Lista de un fichero con fseek a una lista auxiliar en el programa.
Publicado por: samur88 en 12 Mayo 2011, 23:25 pm
Solucionado. Disculpen las molestias.