std::gets
Определено в заголовке <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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/gets