При использовании fprintf()
и fscanf()
в текстовых файлах в Windows необходимо или рекомендуется открывать файл в текстовом режиме по сравнению с двоичным режимом?
Зависит ли ответ от использования Microsoft реализации стандартной библиотеки C или GNU Libc в Windows?
Спасибо. Можете ли вы уточнить "зависит от того, что вы хотите"?
В окнах двоичный или текстовый режим различаются преобразованием конца строки.
система выполняет преобразование конца строки (например, с помощью низкоуровневых POSIX write
и read
). Но это не беда: преобразование конца строки выполняется в текстовом режиме, а в бинарном ничего не меняется.
printf
и другие функции форматирования в конечном итоге вызывают низкоуровневую функцию чтения/записи/что угодно, которая обрабатывает это преобразование конца строки.
\n
в файле, открытом в текстовом режиме, система добавляет символ \r
перед новой строкой.\n
в файле, открытом в текстовом режиме, система удаляет символ \r
перед новой строкой. Если его нет, он ничего не удаляет. Если есть 2 символа \r
, он удаляет только один.Обратите внимание, что запись текстовых файлов в двоичном режиме может быть полезна, если вы хотите записывать текстовые файлы, совместимые с Linux, без символа \r
.
When using fprintf() and fscanf() on text files in Windows, is it necessary or recommended to open the file in text mode compared to binary mode?
fprintf / фсканф основаны на низкоуровневой функции fputc / fgetc и т. д., поэтому управление текстовым/двоичным режимом следует тем же правилам, что и в Требуют ли fgetc
, fputc
, fgets
и fputs
файл, открытый в текстовом режиме, а fread
и fwrite
требуют файл в двоичном режиме?.
Does the answer depend on using Microsoft's implementation of the standard C library or GNU Libc in Windows?
мингв libc поддерживается моими библиотеками Microsoft, поведение такое же, как у Microsoft libc, некоторые функции следуют ISO, но не GNU/gcc, что является реализацией, а не стандартом. Обратите внимание, что Microsoft не полностью соответствует какому-либо конкретному стандарту POSIX (см. Совместимость в Microsoft Docs).
это не имеет значения, за исключением того, что в двоичном режиме
\r
не добавляется (без преобразования конца строки). Зависит от того, что ты хочешь