От The GNU C Programming Tutorial: Почему функция fgets устарела?
Функция
fgets
("Файл прибудет строку") похожа на функцию получает . Эта функция устарела - это означает, что она устарела , и настоятельно рекомендуется вам ее не использовать - потому что это опасно. Это опасно, потому что если входные данные содержат нулевой символ , вы не можете сказать. Не используйтеfgets
, если вы не знаете, что данные не могут содержать нуль. Не используйте его для чтения файлов, отредактированных пользователем , потому что если пользователь вставляет нулевой символ, вы должны либо правильно обработать его, либо распечатать сообщение об ошибке. Всегда используйтеgetline
илиgetdelim
вместоfgets
, если можете.
Я думал, что функция fgets
останавливается, когда он встречает \0
или \n
; почему эта страница руководства предлагает нулевой байт, является «опасным», когда fgets
должен правильно обрабатывать вход? Кроме того, в чем разница между getline
и fgets
и является функцией fgets
, которая действительно считается устарела в C99 или будущих стандартов C?
Так что 'fgets' продолжает читать прошлые пустые байты, ища только символ новой строки? –
@VilhelmGray: это правильно, и это не скажет вам, что так оно и было. Невозможно убедиться, что первый «\ 0», который вы нашли, был добавлен 'fgets' или нет. –
нулевые байты не принадлежат к ** текстовым ** файлам.'fgets()' был разработан для работы с текстовыми файлами: использование 'fgets()' с файлами двоичных данных не рекомендуется. – pmg