Почему fgets() рассматривается в gcc(linux) и как его использовать?
Возможный дубликат:
Почему функция "получает" опасна? Почему не следует использовать?
Я предлагаю пользователю ввести строку, используя fgets(), которая будет проанализирована с использованием scanf () для различения целых чисел, чисел с плавающей запятой и символов. Я хочу надежную программу, но получаю следующее предупреждение, используя gcc:
В функции main':
: warning: the
Функция get 'опасна и не должна использоваться.
Кто-нибудь может сказать мне, почему это опасно и какова безопасная альтернатива этому? Если кто-то может сказать мне серьезность фатальности fgets(), это будет действительно полезно.
1 ответ
Вы можете быть немного смущены. В двух словах: gets
плохо, fgets
Это хорошо.
man
страница объясняет почему gets
не следует использовать:
BUGS
Never use gets(). Because it is impossible to tell without knowing the
data in advance how many characters gets() will read, and because
gets() will continue to store characters past the end of the buffer, it
is extremely dangerous to use. It has been used to break computer
security. Use fgets() instead.
fgets
принимает размер буфера в качестве одного из аргументов и при правильном использовании не имеет этой проблемы.
В FAQ есть запись с более подробной информацией.