fwrite e sizeof
...se nel frattempo potesse aiutarmi a risolvere questi due problemi che si sono presenteti nella compilazione della prova facoltativa le sarei molto grato... Qui di seguito ho copiato il file di testo del programma con evidenziato tra **** il punto dove si trova l'errore****
typedef struct {
int codice;
char nome[50];
char genere[30];
int annouscita;
} disco;
[...]
disco D[N];
****fwrite(D[i].codice,sizeof(???),1,pfb);****
fwrite(D[i].nome,sizeof(50),1,pfb);
fwrite(D[i].genere,sizeof(30),1,pfb);
****fwrite(D[i].annouscita,sizeof(???),1,pfb);****
Il problema è che il primo parametro della fwrite deve essere un puntatore,
un indirizzo di un'area di memoria da cui la funzione fwrite preleva i dati da
scrivere sul file. Nel caso del genere e del nome, essi sono array, che sono
trattati come puntatori dal C, per cui non ci sono problemi. Nel caso del
codice e dell'anno di uscita, invece, sono degli interi. In questo caso,
quindi, dovrebbe utilizzare il riferimento alla variabile, usando l'operatore &
fwrite(&D[i].codice,...
fwrite(&D[i].annouscita,...
Noti anche che l'operatore sizeof
non è usato correttamente:
sizeof
restituisce l'occupazione in memoria (in byte) di un tipo di dato,
di una variabile oppure di una costante. Provi ad eseguire questo semplice programma:
#include <stdio.h>
main()
{ char X[30];
printf("char: %d\n", sizeof(char));
printf("30: %d\n",sizeof(30));
printf("int: %d\n",sizeof(int));
printf("X: %d\n",sizeof(X));
}
Come avrà intuito dal risultato dell'esecuzione, con
fwrite(D[i].genere,sizeof(30),1,pfb);
non sta dicendo al programma di scrivere 30 byte, ma di scrivere un numero di celle pari a...
Inoltre, che cosa dovremmo mettere al posto dei punti interrogativi che lei ha lasciato?