Запутать в опциях функции fopen () читать bianry и читать текст - PullRequest
0 голосов
/ 03 ноября 2011

здесь я запутался в fopen("filename.txt","rb") и fopen("filename.txt","r")

Так что использовать, когда я хочу получить представление об этом подробно

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Если вы прочитаете справочную страницу для fopen(), вы найдете:

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

0 голосов
/ 03 ноября 2011

Это в основном вопрос среды, в которой вы работаете. Средам разрешается изменять данные при определенных обстоятельствах в недвоичном режиме и даже в двоичном режиме (хотя и в гораздо более ограниченном режиме).

В стандарте C есть это, чтобы сказать о двух типах, от C99 7.19.2 Streams (мой жирный):

2 / Текстовый поток - это упорядоченная последовательность символов, состоящая из строк, каждая строка состоящий из нуля или более символов плюс завершающий символ новой строки. Будь то последняя строка требует, чтобы завершающий символ новой строки определялся реализацией.

Возможно, символы должны быть добавлены, изменены или удалены при вводе и выводе, чтобы соответствовать различным соглашениям для представления текста в среде хоста. Таким образом, не требуется взаимно однозначного соответствия между символами в потоке и внешними символами. представление.

Данные, считанные из текстового потока, обязательно будут сравниваться с данными ранее записанные в этот поток только если: данные состоят только из печати символы и управляющие символы горизонтальной табуляции и новой строки; нет символа новой строки непосредственно предшествуют пробелы; и последний символ - символ новой строки. Будь то пробел, который выписан непосредственно перед символом новой строки появляется при чтении в зависимости от реализации.

3 / Бинарный поток - это упорядоченная последовательность символов, которая может прозрачно записывать внутренние данные. Данные, считанные из двоичного потока, должны сравниваться равными данным, которые были ранее записанный в этот поток, под той же реализацией. Такой поток может, однако, к концу добавьте определенное для реализации число нулевых символов потока.

Так что, по сути, если вы хотите максимально увеличить вероятность того, что ваши данные не будут изменены, используйте двоичный режим. Если вы следуете правилам для текстового режима, вы можете использовать это без страха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...