/ / як записати ціле число у файл (різниця між fprintf та fwrite) - c, fwrite, printf

як написати ціле число до файлу (різниця між fprintf і fwrite) - c, fwrite, printf

Я намагався написати ціле число у файл (відкритий режим - 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 за відповідь № 1

fprintf пише рядок. fwrite пише байти. Отже, у першому випадку ви "пишете байти, що представляють ціле число у файл; якщо його значення" 4 ", чотири байти будуть знаходитися в діапазоні ASCII, який не можна роздрукувати, тому ви не побачите їх у текстовий редактор. Але якщо подивитися на розмір файлу, він, ймовірно, буде 8, а не 4 байти.


1 для відповіді № 2

Використовуючи printf() в даному випадку перетворює ціле число в ряд символів "4". Використовуючи fwrite() викликає записування фактичних байтів, що містять ціле значення, в цьому випадку 4 байти для символів "w", "o", "r", і "d".