#c #visual-studio-code #file-io #ide #cs50
Вопрос:
С помощью стандартной библиотеки C stdio.h
я прочитал , что для вывода ASCII/текстовых данных следует использовать режим "w"
, а для вывода двоичных данных следует использовать "wb"
. Но в чем разница?
В любом случае, я просто выводю массив байтов (символов), верно? И если я выведу байт, отличный от ASCII, в режиме ASCII, программа все равно выведет правильный байт.
Комментарии:
1. Автоматическое преобразование новой строки. Блевать.
3. Если ваша цель не состоит в том, чтобы сделать файлы, которые правильно отображаются в старых версиях блокнота Windows, вы всегда должны использовать эту
"b"
опцию. Текстовый режим, отличный от двоичного, просто превращает вашу жизнь в ад. Если вам нужно поддерживать устаревшие текстовые файлы с CR, просто удалите CR в своем синтаксическом анализаторе; если вы используетеscanf
, он проигнорирует его для вас как часть пропуска пробелов.4. Отличные комментарии. 1 повсюду.
Ответ №1:
Некоторые операционные системы — в основном называемые «windows» — не гарантируют, что они будут читать и записывать ascii в файлы точно так, как вы их передаете. Таким образом, в Windows они фактически сопоставляют rn с n. Это прекрасно и прозрачно при чтении и записи ascii. Но это уничтожило бы поток двоичных данных. В принципе, просто всегда ставьте Windows флаг «b», если вы хотите, чтобы она точно считывала и записывала данные в файлы точно так, как вы их передали.
Ответ №2:
Существуют определенные преобразования, которые могут выполняться при выводе в ASCII (например, вывод строки возврат каретки, когда выводимый символ является новой строкой)-в зависимости от вашей платформы. Такие преобразования не будут выполняться при использовании двоичного формата