Почему 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 есть запись с более подробной информацией.

Другие вопросы по тегам