Как написать целое число в файл (разница между fprintf и fwrite)

Я пытаюсь записать целое число в файл (открытый режим - 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);

Я получаю этот результат в файле:

4word

может кто-нибудь сказать, что я сделал не так? спасибо!

update: я бы в конце концов хотел бы изменить запись на двоичный (я открою файл в режиме wb), будет ли разница в моей реализации?

Ответ 1

fprintf записывает строку. fwrite записывает байты. Итак, в первом случае вы пишете байты, представляющие целое число в файле; если его значение равно "4", четыре байта будут в непечатаемом диапазоне ASCII, поэтому вы не увидите их в текстовом редакторе. Но если вы посмотрите размер файла, это будет, вероятно, 8, а не 4 байта.

Ответ 2

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