fwrite Estructuras

Iniciado por pozo_23, 4 Enero 2017, 09:59 AM

0 Miembros y 1 Visitante están viendo este tema.

pozo_23

Hola, estoy intentando escribir en un archivo de texto datos con la siguiente funcion:



void insertarDatos(FILE *Fichero,tipoAlumno alumno[NALUMNOS],int contador,int vectorAsig[NALUMNOS]){
   
    int i;
    int j;
    Fichero=fopen("fichero.txt","w+");
   
    if(Fichero==NULL){
        printf("\nFichero no existe!\nPor favor creelo");
       
        return;
    }
   
    for(i=0;i<contador;i++){
       
        fwrite(alumno[i].nombre,sizeof(char),sizeof(alumno.nombre),Fichero);
        fwrite(alumno[i].identificador,sizeof(char),sizeof(alumno.identificador),Fichero);
        fwrite(alumno[i].curso,sizeof(int),1,Fichero);
       
    }
    fclose(Fichero);
   
}



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:


fwrite(&alumno[i].curso,sizeof(int),1,Fichero);



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

MAFUS

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.