Namespaces
Variants

gets, gets_s

From cppreference.net
< c ‎ | io
Определено в заголовочном файле <stdio.h>
char * gets ( char * str ) ;
(1) (удалено в C11)
char * gets_s ( char * str, rsize_t n ) ;
(2) (начиная с C11)
1) Считывает данные из stdin в массив символов, на который указывает str до тех пор, пока не будет найден символ новой строки или не наступит конец файла. Символ нуль-терминатора записывается сразу после последнего прочитанного символа в массиве. Символ новой строки отбрасывается, но не сохраняется в буфере.
2) Считывает символы из stdin до тех пор, пока не будет найден символ новой строки или не наступит конец файла. Записывает не более n - 1 символов в массив, на который указывает str , и всегда записывает завершающий нулевой символ (если только str не является нулевым указателем). Символ новой строки, если он найден, отбрасывается и не учитывается в количестве символов, записанных в буфер.
Следующие ошибки обнаруживаются во время выполнения и вызывают установленную в данный момент функцию обработки ограничений :
  • n равно нулю;
  • n больше RSIZE_MAX ;
  • str является нулевым указателем;
  • endline или eof не встречены после сохранения n - 1 символов в буфер.
В любом случае, gets_s сначала завершает чтение и отбрасывает символы из stdin до символа новой строки, условия конца файла или ошибки чтения перед вызовом обработчика ограничений.
Как и все функции с проверкой границ, gets_s гарантированно доступна только если __STDC_LIB_EXT1__ определена реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <stdio.h> .

Содержание

Параметры

str - символьный массив, в который записываются символы из stdin
n - максимальное количество символов, которое может быть записано в массив, на который указывает str

Возвращаемое значение

str при успехе, нулевой указатель при неудаче.

Если сбой вызван условием конца файла, дополнительно устанавливает индикатор eof (см. feof() ) на stdin . Если сбой вызван другой ошибкой, устанавливает индикатор error (см. ferror() ) на stdin .

Примечания

Функция gets() не выполняет проверку границ, поэтому эта функция чрезвычайно уязвима для атак переполнения буфера. Её нельзя безопасно использовать (если только программа не выполняется в среде, которая ограничивает то, что может появиться на stdin ). По этой причине функция была объявлена устаревшей в третьем техническом исправлении стандарта C99 и полностью удалена в стандарте C11. fgets() и gets_s() являются рекомендуемыми заменами.

ВНИМАНИЕ: Никогда не используйте gets() .

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • K.3.5.4.1 Функция gets_s (стр: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • K.3.5.4.1 Функция gets_s (стр.: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • K.3.5.4.1 Функция gets_s (стр: 602-603)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.19.7.7 Функция gets (стр: 298)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.9.7.7 Функция gets

Смотрите также

читает форматированный ввод из stdin , файлового потока или буфера
(функция)
получает строку символов из файлового потока
(функция)
записывает строку символов в файловый поток
(функция)
читает из потока в автоматически изменяемый буфер до разделителя/конца строки
(функция)