Namespaces
Variants

std:: gets

From cppreference.net
< cpp ‎ | io ‎ | c
Definido en el encabezado <cstdio>
char * gets ( char * str ) ;
(obsoleto en C++11)
(eliminado en C++14)

Lee de stdin hacia la cadena de caracteres dada hasta que se encuentra un carácter de nueva línea o ocurre el fin de archivo.

Contenidos

Parámetros

str - cadena de caracteres a escribir

Valor de retorno

str en caso de éxito, un puntero nulo en caso de fallo.

Si el fallo ha sido causado por una condición de fin de archivo, establece adicionalmente el indicador eof (ver std::feof() ) en stdin . Si el fallo ha sido causado por algún otro error, establece el indicador de error (ver std::ferror() ) en stdin .

Notas

La función std::gets() no realiza comprobación de límites. Por lo tanto, esta función es extremadamente vulnerable a ataques de desbordamiento de búfer. No puede utilizarse de forma segura (a menos que el programa se ejecute en un entorno que restrinja lo que puede aparecer en stdin ). Por esta razón, la función fue desaprobada en C++11 y eliminada por completo en C++14. std::fgets() puede utilizarse en su lugar.

Ejemplo

#include <array>
#include <cstdio>
#include <cstring>
int main()
{
    std::puts("Nunca uses std::gets(). ¡Usa std::fgets() en su lugar!");
    std::array<char, 16> buf;
    std::printf("Ingresa una cadena:\n>");
    if (std::fgets(buf.data(), buf.size(), stdin))
    {
        const auto len = std::strlen(buf.data());
        std::printf(
            "La cadena de entrada:\n[%s] está %s y tiene una longitud de %li caracteres.\n",
            buf.data(), len + 1 < buf.size() ? "no truncada" : "truncada", len
        );
    }
    else if (std::feof(stdin))
    {
        std::puts("Error: se ha alcanzado el final del flujo stdin.");
    }
    else if (std::ferror(stdin))
    {
        std::puts("Error de E/S al leer desde stdin.");
    }
    else
    {
        std::puts("Error desconocido en stdin.");
    }
}

Salida posible:

Nunca uses std::gets(). ¡Usa std::fgets() en su lugar!
Ingresa una cadena:
>Living on Earth is expensive, but it does include a free trip around the Sun.
La cadena de entrada:
[Living on Earth] está truncada y tiene una longitud de 15 caracteres.

Véase también

lee entrada formateada desde stdin , un flujo de archivo o un búfer
(función)
obtiene una cadena de caracteres desde un flujo de archivo
(función)
escribe una cadena de caracteres a un flujo de archivo
(función)