allora ho dichiarato questa struttura e globalmente queste variabili
codice:
typedef struct{
       char nome[20];
       char cognome[20];
       char lnascita[20];
       }classe;
       
classe alunno[30];
classe temp[30];
int i=0;
nella funzione scrivi_file creo un file binario e scrivo la struttura

codice:
void scrivi_file(){
     FILE*fp=NULL;
     fp=fopen("anagrafe.dat","ab");
    if(fp==NULL) printf("impossibile creare il file\n");
    else{
         printf("inserisci informazione su file\n");
     printf("inserisci nome\n");
    fflush(stdin);
    gets(alunno[i].nome);
    printf("inserisci cognome\n");
    gets(alunno[i].cognome);
    printf("inserisci luogo di nascita\n");
    gets(alunno[i].lnascita);
    fwrite(&alunno[i],sizeof(classe),1,fp);
    i++;
    fclose(fp);
    }
}
e nella funzione carica_file carico il file se esiste(il controllo l'ho fatto nel main quindi entro nella funzione solo se fp è diverso da NULL) quello che leggo lo salvo in una variabile temporanea del tipo struct classe.
codice:
void carica_file(FILE*fp){
     int j=0;
     while(fread(&temp[j],sizeof(classe),1,fp)>0){
     j++;
     }
}
poi per verificare se ho letto correttamente nella stessa funzione per prova mi sono stampato un campo solo che non lo visualizzo
codice:
printf("%s\n",temp[0].nome);
mi stampa una riga vuota infatti se scrivo per es
codice:
printf("ciao %s\n",temp[0].nome);
ciao lo stampa correttamente ma non visualizzo il resto