Spec-Zone.ru › C++

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.

См. также

scanffscanfsscanf
считывает форматированный ввод из stdin, файлового потока или буфера
(функция)
fgets
считывает строку символов из файлового потока
(функция)
fputs
записывает строку символов в файловый поток
(функция)
Документация по C для gets

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/gets

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API