|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
[c] problema con fwrite
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 ? |
|
|
|
|
|
#2 | ||||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16212
|
Quote:
Quote:
Esistono due modi accettati dall standard ANSI C per dichiarare main, e in entrambi i casi la funzione restituisce int. Leggi il Kernighan&Ritchie. Quote:
Quote:
Prova a visualizzare il file con od anziché con cat...
__________________
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 |
||||
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
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........ Ultima modifica di Prince_81 : 22-07-2008 alle 10:06. |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
Semplicemente, hai costruito un file binario, costruito dai _numeri_ 1, 2, 3... e non dalle _stringhe_ "1", "2", "3". Prova questo: Codice:
int pos;
...
for (pos=0; pos<9; ++pos)
fprintf(fp, "%d\r\n", a[pos]);
...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
Il programma ke devo fare pretende l'utilizzo di un file binario e la scrittura di una struttura su di esso ecco un esempio:
Codice:
#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);
}
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. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
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
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#7 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16212
|
Quote:
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.
__________________
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 |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
l'estensione .txt c'è già quando creo il file.
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jul 2008
Città: Nel mio studio
Messaggi: 168
|
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.
__________________
Since Rocco Siffredi, the saying "pain in the ass" got a total new meaning |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:29.




















