View Full Version : [c] problema con fwrite
Prince_81
22-07-2008, 09:25
Vi scrivo perchè ho un problema con la scrittura di numeri su file ecco un esempio:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
FILE *fp;
char filename[]="C:\\Users\\nomeutente\\Desktop\\studente.txt";
int A[]={1,2,3,4,5,6,7,8,9};
fp=fopen(filename,"wb");
if((fwrite(A,sizeof(int),9,fp)) != 9){
puts("errore di scrittura su file");
exit(1);
}
fclose(fp);
}
Il problema è ke sul file anziche dell'array di numeri mi trovo il seguente output :
Come mai? potete consigliarmi ?
Ziosilvio
22-07-2008, 09:46
Vi scrivo perchè ho un problema con la scrittura di numeri su file ecco un esempio:
#include <stdio.h>
Quando scrivi del codice sorgente, adopera il tag "code".
#include <stdlib.h>
#include <string.h>
void main()
main non deve essere void.
Esistono due modi accettati dall standard ANSI C per dichiarare main, e in entrambi i casi la funzione restituisce int.
Leggi il Kernighan&Ritchie.
{
FILE *fp;
char filename[]="C:\\Users\\nomeutente\\Desktop\\studente.txt";
int A[]={1,2,3,4,5,6,7,8,9};
fp=fopen(filename,"wb");
if((fwrite(A,sizeof(int),9,fp)) != 9){
puts("errore di scrittura su file");
exit(1);
}
fclose(fp);
}
Il problema è ke
Questo è un forum in lingua italiana.
sul file anziche dell'array di numeri mi trovo il seguente output :
Sul file ti ritrovi i valori interi da 1 a 9, invece che i caratteri ASCII da 1 a 9.
Prova a visualizzare il file con od anziché con cat...
Prince_81
22-07-2008, 10:02
Se ho utilizzato ke al posto di che è proprio per integrarmi con il linguaggio che viene utilizzato ormai sia nelle chat che nei forum, cioè un linguaggio sbrigativo, di poche parole, se questo vi crea dei problemi di comprensione mi scuso posticipatamente.
Detto questo vorrei dire che non ho capito che cosa voleva dire con Prova a visualizzare il file con od anziché con cat..., io ho fatto un test, ho provato a prelevare i numeri dal file con fread e l'array si è riempito dei numeri salvati sul file, quindi i numeri ci sono e si possono leggere solo se prelevati con un programma c, ma se volessi far leggere il file .txt a qualcuno con il wordpad per esempio non potrei come risolvere questo problema?
Una possibile soluzione sarebbe dichiarare anzichè un array di interi un array di char........
ilsensine
22-07-2008, 10:51
Se ho utilizzato ke al posto di che è proprio per integrarmi con il linguaggio che viene utilizzato ormai sia nelle chat che nei forum
Non su questo forum...
Detto questo vorrei dire che non ho capito che cosa voleva dire con Prova a visualizzare il file con od anziché con cat...
Per te niente (ZioSilvio, tutto preso dal "ke", non ha notato che eri su windows dove "od" non esiste :) ).
Semplicemente, hai costruito un file binario, costruito dai _numeri_ 1, 2, 3... e non dalle _stringhe_ "1", "2", "3".
Prova questo:
int pos;
...
for (pos=0; pos<9; ++pos)
fprintf(fp, "%d\r\n", a[pos]);
...
Prince_81
22-07-2008, 11:50
Il programma ke devo fare pretende l'utilizzo di un file binario e la scrittura di una struttura su di esso ecco un esempio:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct generale {char nome[30];char indirizzo[30];int stipendio;int eta;}st;
void main()
{
FILE *fp;
char filename[]="C:\\Users\\nomeutente\\Desktop\\studente.txt";
puts("Inserire nome");
gets(st.nome);
puts("Inserire indirizzo");
gets(st.indirizzo);
puts("inserire stipendio");
scanf("%d",&st.stipendio);
puts("inserire eta");
scanf("%d",&st.eta);
fp=fopen(filename,"wb");
if((fwrite(&st,sizeof(st),1,fp)) != 1){
puts("errore di scrittura su file");
exit(1);
}
fclose(fp);
}
Ecco perchè insisto sull'utilizzo di fwrite perchè leggo sul mio manuale ke si utilizza quando si usano file binari e poi così facendo posso anche aggiornare più facilmente i dati.
Il programma non è completo l'ho spezzettato per non dilungarmi in quanto il mio problema è semplicemente poter leggere anche i numeri sul file .txt, ho provato nella struttura ha creare tutte variabili char ma non so se per il mio esercizio va bene.
ilsensine
22-07-2008, 12:02
Il programma ke devo fare pretende l'utilizzo di un file binario e la scrittura di una struttura su di esso
(ancora col ke :muro: )
Quindi la tua implementazione era corretta, ma quello che crei è un file binario, _non_ un file di testo. Quindi non puoi aprirlo con un editor di testo (notepad & co), vedresti solo spazzatura.
Non è che semplicemente aggiungendo ".txt" all'estensione si aggiusta magicamente tutto ;)
Ziosilvio
22-07-2008, 12:13
ZioSilvio, tutto preso dal "ke", non ha notato che eri su windows dove "od" non esiste
Primo e più importante: Ziosilvio, con la esse minuscola.
Poi: od forse non c'è per Windows, ma c'è per Cygwin (che gira sotto Windows).
In alternativa si può usare un editor esadecimale, come Hexedit.
Prince_81
22-07-2008, 20:04
l'estensione .txt c'è già quando creo il file.
Big Bamboo
22-07-2008, 20:23
l'estensione .txt c'è già quando creo il file.
L'estensione non conta nulla, se salvi i dati in binario, solo un editor esadecimale o un programma che interpreti i dati potranno visualizzare il vero contenuto del file.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.