2011-07-01 6 views
11

Próbowałem napisać liczbę całkowitą do pliku (trybem otwartym jest w). fprintf napisał go poprawnie ale fwrite napisał bełkot:jak napisać liczbę całkowitą do pliku (różnica między fprintf i fwrite)

int length; 
char * word = "word"; 

counter = strlen(word); 
fwrite(&length, sizeof(int), 1, file); 
fwrite(word, sizeof(char), length, file); 

a wynik w pliku to:

słowo

ale jeśli mogę użyć fprintf zamiast, jak to:

int length; 
char * word = "word"; 

counter = strlen(firstWord); 
fprintf(file, "%d", counter); 
fwrite(word, sizeof(char), length, file); 

Otrzymuję ten wynik w pliku:

4word

może ktoś powiedzieć co zrobiłem źle? dzięki!

aktualizacja: Chciałbym ewentualnie zmienić zapis na binarny (otworzę plik w trybie wb), czy będzie różnica w mojej implementacji?

+2

długość jest niezainicjowana. –

+0

@omrib: Prawdopodobnie lubi pisanie śmieci do plików;) –

Odpowiedz

19

fprintf zapisuje ciąg znaków. fwrite zapisuje bajty. W pierwszym przypadku zapisujesz bajty reprezentujące liczbę całkowitą do pliku; jeśli jego wartość wynosi "4", cztery bajty będą w niedrukowalnym zakresie ASCII, więc nie będzie ich widać w edytorze tekstu. Ale jeśli spojrzysz na rozmiar pliku, prawdopodobnie będzie to 8, a nie 4 bajty.

+1

więc jeśli chcę zapisać liczbę całkowitą w trybie binarnym, powinienem użyć fwrite, ale jeśli piszę do pliku tekstowo, powinienem użyć fprintf? –

+3

@hershalle: tak. – vanza

+0

dzięki! byłeś bardzo pomocny –

1

Konwersja liczby całkowitej na serię znaków, w tym przypadku "4". Użycie fwrite() powoduje zapisanie rzeczywistych bajtów zawierających wartość całkowitą, w tym przypadku 4 bajty dla znaków 'w', 'o', 'r', i 'd'.

Powiązane problemy