PDA

Visualizza la versione completa : [C++] Scrivere su file il contenuto di un buffer


emi81
07-05-2007, 14:47
ciao a tutti,
devo scrivere il contenuto di un buffer su un file di .txt, come devo fare ?

ho provato in questo modo :




FILE *file;
file = fopen("prova.txt","w");
if (file != NULL) {
fprintf (file, "%s",memdata);
}
fclose(file);



dove memdata una locazione di memoria.

facendo cosi per non mi viene scritto il vero valore del buffer, ma solo qualche carattere.
come posso fare per far scrivere tutti i dati contenuti nel buffer ?

Grazie!

oregon
07-05-2007, 14:55
Cosa e' memdata ? E' una stringa terminata da carattere NULL ?

Che vuoi dire con "una locazione di memoria"?

Dovresti mostrare la dichiarazione di memdata, l'unica cosa importante che non hai scritto ... se devi scrivere i valori binari allora devi usare la fwrite

metal_prog
07-05-2007, 14:58
Io ho provato a fare questo programma:
#include <cstdlib>
#include <stdio.h>

int main()
{
char memdata[200]="Questa una prova di testo\0";
FILE *file;
file = fopen("prova.txt","w");
if (file != NULL) {
fprintf (file, "%s",memdata);
}
fclose(file);
}

Funziona benissimo: viene generato un file "prova.txt" che contiene "Questa una prova di testo"! Cosa c' che non va?Forse hai sbagliato in un altro punto? :confused:
Hai usato un buffer che non una stringa? :rollo:

emi81
07-05-2007, 15:09
il mio memdata contiene dati binari, e vorrei che stampassae dati binari e non una stringa..

oregon
07-05-2007, 15:46
E quindi usa la fwrite ...

emi81
07-05-2007, 15:51
ho provato a usare l fwrite, ma non mi scrive niente sul file.
io faccio cosi :


LPSTR memdata;


FILE *file;
file = fopen("prova.txt","w");
fwrite (memdata, 0 , 2000000, file );
fclose(file);

oregon
07-05-2007, 16:05
Prima di tutto, stai dicendo alla fwrite di scrivere 2000000 elementi di lunghezza 0, per un totale di 0 byte ...

E secondo, stai utilizzando un puntatore (memdata) mai inizializzato, e questo e' un ottimo metodo per avere un crash ...

emi81
07-05-2007, 16:06
ok, ho trovato l'errore.

FILE *file;
file = fopen("prova.txt","w");
fwrite (memdata, 1 , sizeof(memdata), file );
fclose(file);

mettendo 0 non scriveva niente.

Scusate se prima ho aperto una discussione simile.

emi81
07-05-2007, 16:07
me ne sono accorto :zizi: :zizi: :zizi:
grazie mille per l'aiuto.

la varaibile la inizializzavo ben, era quello 0 che non mi faceva scrivere niente :zizi: :zizi:

Grazie a tutti!

oregon
07-05-2007, 16:11
Originariamente inviato da emi81
ok, ho trovato l'errore.

FILE *file;
file = fopen("prova.txt","w");
fwrite (memdata, 1 , sizeof(memdata), file );
fclose(file);

mettendo 0 non scriveva niente.

Scusate se prima ho aperto una discussione simile.

S ... ma cosi' e' sbagliato ...

Se scrivi 1 elemento di grandezza sizeof(memdata), non farai altro che scrivere sempre e comunque 4 byte, perche' il sizeof di un puntatore (su Win32) e' di 4 byte.

Se vuoi scrivere il numero di byte puntati da memdata, devi specificarlo con una costante.

Loading