Test Foro de elhacker.net SMF 2.1

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:



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
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.