2014-09-13 2 views
3

Википедия говорит:Является ли fgets() лучше всего избегать в двоичном режиме?

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

Является ли только fgets() лучше всего в двоичном режиме? Как насчет других функций библиотеки C для чтения файлов?

Спасибо.

+0

Это функция, предназначенная для чтения строки _text_. Для двоичного файла он не используется. –

ответ

5

fgets() читает строку текста, заканчивающуюся символом новой строки '\n' (или частичной линией, если следующая строка ввода больше, чем используемый буфер).

При использовании в текстовом потоке фактический маркер конца строки, однако представленный, преобразуется в один символ '\n', поэтому fgets() будет работать должным образом.

fgets() гораздо реже будет полезен для двоичного потока. Он по-прежнему будет считывать символы до конца буфера или до первого байт '\n', в зависимости от того, что окажется первым. Если это то, что вы хотите сделать, нет особых причин не использовать fgets().

Содержимое двоичного файла имеет любой смысл, который вы им назначаете. Если данный двоичный файл использует '\n' в качестве разделителя - будет ли это конечным маркером системы для текстовых файлов или нет - тогда, вероятно, будет работать fgets().

Но если у вас есть двоичный файл с записями (?), Отмеченный символами '\n', мне нужно задаться вопросом, почему это не был текстовый файл.

fgets()предназначенный для, предназначенный для чтения строк из текстового потока, но способ, которым он работает, строго определен стандартом C. Он определен для работы , как если бы неоднократно вызывал fgetc().

Если это полезно для чего-то еще, не стесняйтесь использовать его. Но любое небольшое изменение ваших требований, например использование символа, отличного от '\n', в качестве разделителя, скорее всего, означает, что fgets() больше не будет работать.

Для простоты вам, вероятно, лучше написать пользовательскую функцию, которая делает то, что вы хотите, с двоичным вводом.

Смежные вопросы