gets, gets_s
Определено в заголовке <stdio.h> |
||
|---|---|---|
char *gets( char *str ); |
(1) | (удалено в C11) |
char *gets_s( char *str, rsize_t n ); |
(2) | (с C11) |
stdin в символьный массив, на который указывает str, до тех пор, пока не будет встречен символ новой строки или конец файла. После последнего прочитанного символа в массив записывается нулевой символ. Символ новой строки отбрасывается, но не сохраняется в буфере.
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
См. также
|
(C11)(C11)(C11) |
читает форматированный ввод из stdin, потока файла или буфера (функция) |
| получает строку символов из потока файла (функция) |
|
| записывает строку символов в поток файла (функция) |
|
|
(динамическая память TR) |
чтение из потока в автоматически изменяемый буфер до разделителя/конца строки (функция) |
Документация C++ для gets |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/gets