Я намагався написати ціле число у файл (відкритий режим - w). fprintf написав це правильно, але fwrite написав гріш:
int length;
char * word = "word";
counter = strlen(word);
fwrite(&length, sizeof(int), 1, file);
fwrite(word, sizeof(char), length, file);
і результат у файлі:
слово
але якщо я використовую fprintf замість цього:
int length;
char * word = "word";
counter = strlen(firstWord);
fprintf(file, "%d", counter);
fwrite(word, sizeof(char), length, file);
Я отримую цей результат у файлі:
4 слово
хтось може сказати, що я зробив не так? Дякую!
оновлення: я з часом хотів би змінити запис на бінарний (я відкрию файл у режимі wb), чи буде різниця в моїй реалізації?
Відповіді:
19 за відповідь № 1fprintf
пише рядок. fwrite
пише байти. Отже, у першому випадку ви "пишете байти, що представляють ціле число у файл; якщо його значення" 4 ", чотири байти будуть знаходитися в діапазоні ASCII, який не можна роздрукувати, тому ви не побачите їх у текстовий редактор. Але якщо подивитися на розмір файлу, він, ймовірно, буде 8, а не 4 байти.
1 для відповіді № 2
Використовуючи printf()
в даному випадку перетворює ціле число в ряд символів "4"
. Використовуючи fwrite()
викликає записування фактичних байтів, що містять ціле значення, в цьому випадку 4 байти для символів "w", "o", "r",
і "d"
.