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