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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
|
|
Documentación C
para
gets
|
|