Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Non riesco a capire perchè se gli passo un carattere la funzione fwrite mi scrive un carattere se invece inserisco un numero mi scrive un lettera strana.
Esempio:
Codice sorgente - presumibilmente C/C++
int i = 'c';
fwrite(&i, 1, 1, stream); /* sul file mi ritroverò la lettera c */
Codice sorgente - presumibilmente C/C++
int i = 5;
fwrite(&i, 1, 1, stream); /* sul file mi ritroverò una lettera strana */
fwrite(&i, 1, 1, stream); /* sul file mi ritroverò una lettera strana */
Devi mettere
Codice sorgente - presumibilmente C/C++
int i = '1';
...
Accade semplicemente perché passi l'indirizzo di un intero contenente il valore del carattere ascii da salvare, se passi 49(o l'equivalente '1' in char) stampa '1'.
Comunque al posto di passare un int puoi passare un char... è la stessa cosa.
però ragazzi ho provato a creare e compilare quindi eseguire questo programma:
Codice sorgente - presumibilmente C++
#include <stdio.h>
typedefstruct{
int anni;
char*nome;
} persona;
int main (void){
persona uomo;
uomo.anni=16;
uomo.nome="Francesco";
FILE*testo;
testo =fopen("prova", "wb");
fwrite(&uomo, sizeof(persona), 1, testo);
/* vediamo se li legge */
fread(&uomo, sizeof(persona), 1, testo);
printf("Persona {\n\t anni = %d\n\t nome = %s\n}\n\n", uomo.anni, uomo.nome);
fclose(testo);
return0;
}
Come potete vedere scrivo grazie alla funzione fwrite tutta la struct persona. Come potete vedere dichiaro la variabile int anni (presente nella struct persona) = 16 (senza apici) Successivamente leggo ciò che ho scritto in precedenza è indovinato che esce?
Codice sorgente - presumibilmente Plain Text
pitagora@pitagora:~$ ./try
Persona {
anni = 16
nome = Francesco
}
Non dovrebbe uscire l'ascii di 16?
Un altra domanda: se apro il file con un banalissimo editor mi escono scritte senza senso. Se invece faccio eseguire questo programma (simile a precedente), volevo vedere se con altre funzioni tipo fscanf riusciva a leggere.
Risultato:
Codice sorgente - presumibilmente C++
#include <stdio.h>
typedefstruct{
int anni;
char*nome;
} persona;
int main (void){
persona uomo;
uomo.anni=16;
uomo.nome="Francesco";
FILE*testo;
testo =fopen("prova", "wb");
fwrite(&uomo, sizeof(persona), 1, testo);
/* vediamo se li legge */
fscanf(testo, "%d", &uomo.anni);
fscanf(testo, "%s", uomo.nome);
printf("Persona {\n\t anni = %d\n\t nome = %s\n}\n\n", uomo.anni, uomo.nome);
fclose(testo);
return0;
}
Output:
Codice sorgente - presumibilmente Plain Text
pitagora@pitagora:~$ ./try
Persona {
anni = 16
nome = Francesco
}
me le legge tranquillamente! Perchè con un editor no?
Ultima modifica effettuata da Pitagora il 24/12/2010 alle 15:50
()
Newbie
Messaggi: Iscritto:
0
Postato alle 16:34
Giovedì, 23/12/2010
credo che scriva il carattere ascii corrispondente al valore di 'i'.
Puoi benissimo scrivere un intero,solo che la quantità di memoria necessaria ad ospitare un intero non è 1 byte.
Codice sorgente - presumibilmente C/C++
int numero=5;
...
fwrite (buffer , 1 , sizeof(numero) , pFile );
...
Il terzo argomento della fwrite è la quantità di byte da scrivere,l' operatore sizeof ritorna la quantità di byte di una variabile.
Puoi benissimo scrivere qualsiasi variabile su un file,basta specificare la quantità di memoria da scrivere.
Un carattere ha un byte,l' alternativa è convertire l' intero in carattere e scriverlo come carattere,se ha una sola cifra:
Codice sorgente - presumibilmente C/C++
int numero=5;
char numero_copia = 5+48;
...
fwrite(numero_copia,1,sizeof(char),pFile);
...
Ultima modifica effettuata da ramy1989 il 06/01/2011 alle 16:10