Объявление gets:
char * gets ( char * str );
Обратите внимание на вопиющее упущение максимального размера для str.
cplusplus.com говорит 2
Обратите внимание, что получение отличается от fgets: не только использует stdin как источник, но он не включает символ окончания строки в полученной строке и не позволяет указать максимальный размер для str (, что может привести к переполнению буфера).
А также:
Самая последняя версия стандарта C (2011) окончательно удалил эту функцию из ее спецификации. Функция устаревший в С++ (по состоянию на 2011 год, который следует за C99 + TC3).
Теперь, конечно, fgets обычно рекомендуется в качестве замены gets, потому что его объявление выглядит следующим образом:
char * fgets ( char * str, int num, FILE * stream );
Он  ДАЕТ принять параметр размера. Это делает его намного безопаснее, чем gets.
Теперь, поскольку я не хочу тратить деньги на скачивание или покупку C11 standard, может ли кто-нибудь пролить свет на причину обесценивания gets и что это значит для будущего кода? Почему он существует в том же месте, когда fgets безопаснее? И почему он  только сейчас устарел?
