Почему я должен открыть файл в двоичном режиме, чтобы записать его в C? - PullRequest
1 голос
/ 24 апреля 2010
fprintf(file, "%d %d %d", array[0], array[1], array[2]);

, чтобы этот оператор работал, я должен открыть файл в режиме 'wb', а не в режиме 'w'.Как в двоичном режиме работает синтаксис?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

Я предполагаю, что вы используете эту функцию при открытии файла:

FILE *fopen(const char *path, const char *mode);

Когда вы программируете под Linux b игнорируется, так как это не имеет никакого эффекта. От справочная страница :

Строка режима может также включать буква «б» либо как последний символ действовать или как символ между символами в любом из два-ха- Строки acter описаны выше. Это строго для совместимости с С89 и не имеет никакого эффекта; 'b' игнорируется на всех POSIX, соответствующих Sys- Темы, включая Linux. (Другие системы могут обрабатывать текстовые файлы и двоичный файлы по-разному, и добавление «b» может быть хорошей идеей, если вы делаете I / O в двоичный файл и ожидать, что ваша программа может быть перенесена на не-Unix сред.)

Что касается Windows (источник здесь ):

b: Открыть в двоичном формате (не переведено) Режим; переводы с участием возврат каретки и перевод строки символы подавляются.

Итак, вывод:
Если вам нужен портативный доступ к двоичным данным в коде C, для совместимости используйте «b».

1 голос
/ 24 апреля 2010

Сначала получите указатель файла, используя fopen FILE * fp = fopen ("file.bin", "r +"); Затем используйте fread для чтения и fwrite для .. записи. Смотри это Также, пожалуйста, внимательно прочитайте руководство и обратите внимание, что fread и fwrite возвращают целое число, которое следует проверить, чтобы точно узнать, сколько было прочитано / записано.

...