gets
, безусловно, опасно, поскольку нет способа предотвратить переполнение буфера.
Например, если ваш пользователь ввел 150 символов, это почти наверняка вызовет проблемы для вашей программы. Следует также избегать использования scanf
с неограниченным спецификатором формата "%s"
для ввода, который вы не можете контролировать.
Однако использование gets
должно не быть ошибкой, поскольку оно соответствует стандарту. На most, это должно быть предупреждение (если вы, как разработчик, не настроите что-то вроде «обрабатывать предупреждения как ошибки»).
fputs
хорошо, совсем не опасно.
См. здесь для надежной пользовательской функции ввода, используя fgets
, которая может использоваться для предотвращения переполнения буфера.