Spec-Zone.ru › C

gets, gets_s

Определено в заголовке <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 является нулевым указателем
  • символ новой строки или конец файла не встречены после записи n-1 символов в буфер.
В любом случае, gets_s сначала завершает чтение и отбрасывание символов из stdin до символа новой строки, условия конца файла или ошибки чтения перед вызовом обработчика ограничений.
Как и во всех функциях с проверкой границ, gets_s гарантированно доступна только в том случае, если __STDC_LIB_EXT1__ определена реализацией, и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <stdio.h>.

Параметры

str - символьная строка для записи

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

str при успешном выполнении, нулевой указатель при ошибке.

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

Примечания

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

Никогда не используйте gets().

Ссылки

  • Стандарт 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

См. также

scanffscanfsscanfscanf_sfscanf_ssscanf_s
(C11)(C11)(C11)
читает форматированный ввод из stdin, потока файла или буфера
(функция)
fgets
получает строку символов из потока файла
(функция)
fputs
записывает строку символов в поток файла
(функция)
getlinegetwlinegetdelimgetwdelim
(динамическая память TR)
чтение из потока в автоматически изменяемый буфер до разделителя/конца строки
(функция)
Документация C++ для gets

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/gets

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API