Как написать целое число в файл (разница между 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'
.