как записать целое число в файл (разница между fprintf и fwrite) - PullRequest
11 голосов
/ 02 июля 2011

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

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

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

Ответы [ 2 ]

20 голосов
/ 02 июля 2011

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

1 голос
/ 02 июля 2011

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

...