gets, gets_s
|
Определено в заголовочном файле
<stdio.h>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(1) | (удалено в C11) |
|
char
*
gets_s
(
char
*
str, rsize_t n
)
;
|
(2) | (начиная с C11) |
- 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
Смотрите также
|
(C11)
(C11)
(C11)
|
читает форматированный ввод из
stdin
, файлового потока или буфера
(функция) |
|
получает строку символов из файлового потока
(функция) |
|
|
записывает строку символов в файловый поток
(функция) |
|
|
(dynamic memory TR)
|
читает из потока в автоматически изменяемый буфер до разделителя/конца строки
(функция) |
|
C++ documentation
для
gets
|
|