Почему gets () устарел?

При использовании gets() в моем коде компилятор кричит

warning: the 'gets' function is dangerous and should not be used.`

и

warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638)
[-Wdeprecated-declarations]

Какие-то конкретные причины?


person network-programmer    schedule 17.06.2015    source источник
comment
Вместо этого используйте fgets с stdin. Как говорится в сообщении, gets опасен, так как не обеспечивает защиты от переполнения буфера.   -  person Weather Vane    schedule 17.06.2015
comment
Буквальный ответ на вопрос, почему компилятор выдает предупреждение? is Потому что это сделали программисты компилятора.   -  person user253751    schedule 17.06.2015


Ответы (2)


Может кто-нибудь объяснить, почему компилятор так показывает…

Да, потому что функция gets() опасна, поскольку страдает проблемой переполнения буфера. Всем следует воздерживаться от этого.

Кроме того, что касается предупреждения с -Wdeprecated-declarations, gets() больше не является частью C стандарта [C11 и далее]. Итак, библиотеки C компиляторы больше не привязаны для поддержки этого. В будущем его можно будет удалить. Чтобы предупредить разработчика о потенциальной ловушке и предотвратить дальнейшее использование gets(), компилятор ## выдает предупреждающее сообщение.


(##) Чтобы быть педантичным, предупреждение не генерируется компилятором (gcc) само по себе, а скорее вызвано атрибутом pragma или в реализации gets() в glibc, который заставляет компилятор генерировать предупреждение. [Любезно, FUZxxl, из дурацкого ответа.]

person Sourav Ghosh    schedule 17.06.2015

  1. gets может вызвать переполнение буфера, так как не учитывает длину данных. Более подробная информация здесь: Функция gets () в C

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

person Steephen    schedule 17.06.2015