Описание тега gets
Все, что связано с функциями стандартной библиотеки C или C++ gets
(определено в <stdio.h>
Стандартный заголовок C) или std::gets
(определено в <cstdio>
Стандартный заголовок C++). Эти функции используются для чтения последовательности символов из входного потока и записи ее в символьный буфер в виде строки. На функции нет ограничений, чтобы они не записывались за пределы переданного массива.
НЕ ИСПОЛЬЗУЙТЕ ЭТИ ФУНКЦИИ: они опасны и устарели по соображениям безопасности, потому что они легко могут вызвать переполнение буфера. Для получения дополнительной информации о том, почему используетсяgets
вредно, рассмотрите ссылку ниже.
Начиная с C11 (ISO/IEC 9899:2011) gets
был удален из стандартной библиотеки C. Приложение K стандарта C определяет дополнительную функцию замены, называемуюgets_s
по причинам обратной совместимости, но дает следующую рекомендацию использовать fgets
при любой возможности:
ISO 9899:2011 K.3.5.4.1
Рекомендуемая практика
В
fgets
Функция позволяет правильно написанным программам безопасно обрабатывать строки ввода, слишком длинные для хранения в массиве результатов. Обычно для этого требуется, чтобы абонентыfgets
обратите внимание на наличие или отсутствие символа новой строки в массиве результатов. Рассмотрите возможность использованияfgets
(вместе с любой необходимой обработкой на основе символов новой строки) вместоgets_s
.
Обратите внимание, что gets_s()
обычно не доступен, кроме как в Windows с использованием библиотеки Microsoft C.
См. CPPreference.com: