Мне кажется, люди, особенно изучающие язык программирования C, все еще используют gets
< /a> для чтения данных из стандартного ввода. Несмотря на это, теперь он был удален1 из стандарта C11, а отказ от ответственности на cppreference гласит:
Функция gets() не выполняет проверку границ, поэтому эта функция чрезвычайно уязвима для атак переполнения буфера. Его нельзя использовать безопасно (если только программа не работает в среде, которая ограничивает то, что может отображаться на стандартном вводе). По этой причине эта функция объявлена устаревшей в третьем исправлении к стандарту C99 и полностью удалена в стандарте C11. fgets() и gets_s() являются рекомендуемой заменой.
Никогда не используйте get().
Однако похоже, что это не новая проблема, возникшая в связи с более современными философиями программирования. Он всегда был бы сломан и вызывал сбой программ, и я не понимаю, что можно было бы подразумевать под «средой, которая ограничивает то, что может отображаться на стандартном вводе».
Итак, было ли это когда-либо полезным в прошлом? Или по какой причине он был добавлен в предыдущие стандарты и достандартные версии C?
(1) ... или, по крайней мере, изменено, чтобы иметь дополнительный параметр, указывающий максимальную длину для чтения. Однако я спрашиваю о старой подписи, получая только указатель.
&&
к этим критериям. Кажется, вы применяете||
. :-) Здесь нет реальной проблемы. Я не устанавливал правила SO (и это было бы другое место, если бы я это сделал), я просто указываю на них. - person T.J. Crowder   schedule 05.03.2013gets
среди начинающих является реальной проблемой, с которой мы все сталкиваемся, поэтому я не понимаю ни вашей точки зрения, ни вашего VTC. - person bitmask   schedule 05.03.2013gets
практично? В настоящее время невозможно ответить без определения полезности и, вероятно, вызовет дебаты, аргументы или расширенное обсуждение. Если вы хотите, чтобы вопрос был открыт повторно, ответ на него должен быть фактическим. - person Paul Turner   schedule 05.03.2013