/ / jak zapisać liczbę całkowitą do pliku (różnica między fprintf a fwrite) - c, fwrite, printf

jak napisać liczbę całkowitą do pliku (różnica między fprintf i fwrite) - c, fwrite, printf

Próbowałem napisać liczbę całkowitą do pliku (tryb otwarty to w). fprintf napisał to poprawnie, ale fwrite napisał bełkot:

int length;
char * word = "word";

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

a wynikiem w pliku jest:

słowo

ale jeśli zamiast tego użyję fprintf:

int length;
char * word = "word";

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

Otrzymuję ten wynik w pliku:

4word

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

update: W końcu chciałbym zmienić zapis na binarny (otworzę plik w trybie wb), czy będzie różnica w mojej implementacji?

Odpowiedzi:

19 dla odpowiedzi nr 1

fprintf pisze łańcuch. fwrite zapisuje bajty. Tak więc w pierwszym przypadku piszesz bajty reprezentujące liczbę całkowitą do pliku; jeśli jego wartość to „4”, cztery bajty będą w niedrukowalnym zakresie ASCII, więc nie zobaczysz ich w Edytor tekstu. Ale jeśli spojrzysz na rozmiar pliku, prawdopodobnie będzie to 8, a nie 4 bajty.


1 dla odpowiedzi nr 2

Za pomocą printf() w tym przypadku konwertuje liczbę całkowitą na ciąg znaków "4". Za pomocą fwrite() powoduje, że rzeczywiste bajty zawierające wartość całkowitą są zapisywane, w tym przypadku 4 bajty dla znaków "w", "o", "r", i "d".