Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pozo_23 en 4 Enero 2017, 09:59 am



Título: fwrite Estructuras
Publicado por: pozo_23 en 4 Enero 2017, 09:59 am
Hola, estoy intentando escribir en un archivo de texto datos con la siguiente funcion:

Código
  1.  
  2. void insertarDatos(FILE *Fichero,tipoAlumno alumno[NALUMNOS],int contador,int vectorAsig[NALUMNOS]){
  3.  
  4.    int i;
  5.    int j;
  6.    Fichero=fopen("fichero.txt","w+");
  7.  
  8.    if(Fichero==NULL){
  9.        printf("\nFichero no existe!\nPor favor creelo");
  10.  
  11.        return;
  12.    }
  13.  
  14.    for(i=0;i<contador;i++){
  15.  
  16.        fwrite(alumno[i].nombre,sizeof(char),sizeof(alumno.nombre),Fichero);
  17.        fwrite(alumno[i].identificador,sizeof(char),sizeof(alumno.identificador),Fichero);
  18.        fwrite(alumno[i].curso,sizeof(int),1,Fichero);
  19.  
  20.    }
  21.    fclose(Fichero);
  22.  
  23. }
  24.  
  25.  

El caso es que, al usar fwrite las dos primeras lineas, con datos de tipo char, no hay ningun problema, y en el fichero se me guardan los datos, pero cuando llega al fwrite donde hay un entero, al compilar me da el warning:

warning: passing argument 1 of 'fwrite' makes pointer from integer without a cast [-Wint-conversion]

y no se muy bien lo que quiere decir. He intentado probar con la linea:
Código
  1.  
  2. fwrite(&alumno[i].curso,sizeof(int),1,Fichero);
  3.  


pero me escribe caracteres aleatorios en el fichero. ¿Podrían ayudarme? Gracias


Título: Re: fwrite Estructuras
Publicado por: MAFUS en 4 Enero 2017, 11:34 am
No estás generando un archivo de texto sino un archivo binario. Por esa razón al escribir el número el ordenador lo hace de forma binaria y cuando intentas leerlo ves cosas raras, el ordenador toma el número literal de la memoria y lo intenta convertir en caracteres ASCII o como sea que decodifique el visualizador que usas.

Genera un archivo de texto con "w+t" en la llamada a fopen.
Usa fputs, fprintf o cualquier otra función dedicada a escribir en formato texto para darle los datos al archivo.