Зачем использовать режим fopen () ‘b’ (stdio.h), когда вывод может быть не ASCII независимо от этого?

#c #visual-studio-code #file-io #ide #cs50

Вопрос:

С помощью стандартной библиотеки C stdio.h я прочитал , что для вывода ASCII/текстовых данных следует использовать режим "w" , а для вывода двоичных данных следует использовать "wb" . Но в чем разница?

В любом случае, я просто выводю массив байтов (символов), верно? И если я выведу байт, отличный от ASCII, в режиме ASCII, программа все равно выведет правильный байт.

Комментарии:

1. Автоматическое преобразование новой строки. Блевать.

2. wiki.answers.com/Q/…

3. Если ваша цель не состоит в том, чтобы сделать файлы, которые правильно отображаются в старых версиях блокнота Windows, вы всегда должны использовать эту "b" опцию. Текстовый режим, отличный от двоичного, просто превращает вашу жизнь в ад. Если вам нужно поддерживать устаревшие текстовые файлы с CR, просто удалите CR в своем синтаксическом анализаторе; если вы используете scanf , он проигнорирует его для вас как часть пропуска пробелов.

4. Отличные комментарии. 1 повсюду.

Ответ №1:

Некоторые операционные системы — в основном называемые «windows» — не гарантируют, что они будут читать и записывать ascii в файлы точно так, как вы их передаете. Таким образом, в Windows они фактически сопоставляют rn с n. Это прекрасно и прозрачно при чтении и записи ascii. Но это уничтожило бы поток двоичных данных. В принципе, просто всегда ставьте Windows флаг «b», если вы хотите, чтобы она точно считывала и записывала данные в файлы точно так, как вы их передали.

Ответ №2:

Существуют определенные преобразования, которые могут выполняться при выводе в ASCII (например, вывод строки возврат каретки, когда выводимый символ является новой строкой)-в зависимости от вашей платформы. Такие преобразования не будут выполняться при использовании двоичного формата