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