|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2006
Messaggi: 60
|
[C] Funzioni fread e fwrite
Per scrivere e leggere su file solitamente uso fscanf e fprintf ma avendo necessità di effettuare ricerche sul programma che devo fare mi trovo costretto ad utilizzare fread e fwrite.
f=fopen("database.txt","a"); printf("Inserisci il nome: "); gets(nome); getchar(); fwrite(nome,1,sizeof(nome),f); printf("\nInserisci il cognome: "); gets(cognome); getchar(); fwrite(cognome,1,sizeof(cognome),f); printf("\nInserisci data di nascita: "); gets(datanascita); getchar(); fclose(f); Il file mi viene creato correttamente ma quando vado a leggere con fread non mi restituisce niente il programma oppure mi restituisce schifezze. Per esempio se volessi stampare solo nome farei così: f=fopen("database.txt","r"); fread(nome,1,sizeof(nome),f); puts(nome); fclose(f); Dove sbaglio? Grazie |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2005
Messaggi: 46
|
ciao nesly spero di esserti d aiuto:
sicuramente non l hai trascritto dovresti dichiarare f come struttura(tipo) FILE *f; dovresti controllare fopen per capire se e tutto ok, if(fopen("database.txt","a"))printf("fopen restituisce NULL..sbagli qualcosa"): ciao. |
![]() |
![]() |
![]() |
#3 | |||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
Oltretutto: non vorrei sbagliare, ma hai allocato spazio per la stringa nome prima di chiamare gets? Quote:
Se vuoi la lunghezza di una stringa, non devi usare sizeof ma strlen. Se invece nome è un array di char, allora la sua lunghezza come array non è sizeof(nome), ma sizeof(nome)/sizeof(nome[0]). Fa' attenzione, perché questo trucco funziona solo con gli array statici.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:15.