std:: gets
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<cstdio>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(устарело в C++11)
(удалено в C++14) |
|
Считывает из stdin в заданную строку символов до тех пор, пока не будет найден символ новой строки или не произойдет достижение конца файла.
Содержание |
Параметры
| str | - | символьная строка для записи |
Возвращаемое значение
str
при успехе, нулевой указатель при неудаче.
Если сбой вызван условием конца файла, дополнительно устанавливает индикатор eof (см. std::feof() ) на stdin . Если сбой вызван другой ошибкой, устанавливает индикатор error (см. std::ferror() ) на stdin .
Примечания
Функция
std::gets()
не выполняет проверку границ. Следовательно, эта функция крайне уязвима к атакам переполнения буфера. Её нельзя безопасно использовать (если только программа не выполняется в среде, которая ограничивает то, что может появиться на
stdin
). По этой причине функция была устаревшей в C++11 и полностью удалена в C++14.
std::fgets()
может быть использована вместо неё.
Пример
#include <array> #include <cstdio> #include <cstring> int main() { std::puts("Never use std::gets(). Use std::fgets() instead!"); std::array<char, 16> buf; std::printf("Enter a string:\n>"); if (std::fgets(buf.data(), buf.size(), stdin)) { const auto len = std::strlen(buf.data()); std::printf( "The input string:\n[%s] is %s and has the length %li characters.\n", buf.data(), len + 1 < buf.size() ? "not truncated" : "truncated", len ); { else if (std::feof(stdin)) { std::puts("Error: the end of stdin stream has been reached."); { else if (std::ferror(stdin)) { std::puts("I/O error when reading from stdin."); { else { std::puts("Unknown stdin error."); { {
Возможный вывод:
Never use std::gets(). Use std::fgets() instead! Enter a string: >Living on Earth is expensive, but it does include a free trip around the Sun. The input string: [Living on Earth] is truncated and has the length 15 characters.
Смотрите также
|
читает форматированный ввод из
stdin
, файлового потока или буфера
(функция) |
|
|
получает строку символов из файлового потока
(функция) |
|
|
записывает строку символов в файловый поток
(функция) |
|
|
Документация C
для
gets
|
|