gets, gets_s
|
Definido en el encabezado
<stdio.h>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(1) | (eliminado en C11) |
|
char
*
gets_s
(
char
*
str, rsize_t n
)
;
|
(2) | (desde C11) |
- n es cero;
- n es mayor que RSIZE_MAX ;
- str es un puntero nulo;
- endline o eof no encontrados después de almacenar n - 1 caracteres en el buffer.
gets_s
primero termina de leer y descartar los caracteres de
stdin
hasta el carácter de nueva línea, condición de fin de archivo, o error de lectura antes de llamar al manejador de restricciones.
gets_s
solo está garantizada su disponibilidad si
__STDC_LIB_EXT1__
está definida por la implementación y si el usuario define
__STDC_WANT_LIB_EXT1__
como la constante entera
1
antes de incluir
<stdio.h>
.
Contenidos |
Parámetros
| str | - | un arreglo de caracteres al que se escribirán los caracteres desde stdin |
| n | - | número máximo de caracteres que pueden escribirse en el arreglo apuntado por str |
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 feof() ) en stdin . Si el fallo ha sido causado por algún otro error, establece el indicador error (ver ferror() ) en stdin .
Notas
La función
gets()
no realiza verificación de límites, por lo tanto esta función es extremadamente vulnerable a ataques de desbordamiento de búfer. No puede usarse 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 ha sido desaprobada en el tercer corregendum del estándar C99 y eliminada por completo en el estándar C11.
fgets()
y
gets_s()
son los reemplazos recomendados.
ADVERTENCIA: Nunca uses
gets()
.
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- K.3.5.4.1 La función gets_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- K.3.5.4.1 La función gets_s (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
-
- K.3.5.4.1 La función gets_s (p: 602-603)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.19.7.7 La función gets (p: 298)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.7.7 La función gets
Véase también
|
(C11)
(C11)
(C11)
|
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) |
|
|
(dynamic memory TR)
|
lee desde un flujo hacia un búfer de tamaño automático hasta delimitador/fin de línea
(función) |
|
Documentación de C++
para
gets
|
|