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 1fprintf
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"
.