gets
, _getws
Obtiene una línea del flujo stdin
. Hay disponibles versiones más seguras de estas funciones; consulte gets_s
, _getws_s
.
Importante
Estas funciones están obsoletas. A partir de Visual Studio 2015, no están disponibles en CRT. Las versiones seguras de estas funciones, gets_s
y _getws_s
, siguen estando disponibles. Para obtener información sobre estas funciones alternativas, vea gets_s
, _getws_s
.
Importante
Esta API no se puede usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución. Para obtener más información, vea Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows.
Sintaxis
char *gets(
char *buffer
);
wchar_t *_getws(
wchar_t *buffer
);
template <size_t size>
char *gets(
char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_getws(
wchar_t (&buffer)[size]
); // C++ only
Parámetros
buffer
Ubicación de almacenamiento de la cadena de entrada.
Valor devuelto
Devuelve su argumento si se realiza correctamente. Un puntero NULL
indica un error o una condición de fin de archivo. Utilice ferror
o feof
para determinar qué resultado se ha producido. Si buffer
es NULL
, estas funciones invocan un controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven NULL
y establecen errno
en EINVAL
.
Comentarios
La función gets
lee una línea del flujo de entrada estándar stdin
y la almacena en buffer
. La línea consta de todos los caracteres hasta el primer carácter de línea nueva ('\n'), este último incluido. A continuación,gets
reemplaza el carácter de línea nueva con un carácter nulo ('\0') antes de devolver la línea. Por su parte, la función fgets
conserva el carácter de línea nueva. _getws
es una versión con caracteres anchos de gets
; el argumento y el valor devuelto son cadenas de caracteres anchos.
Importante
No hay forma de limitar el número de caracteres que lee gets
, por lo que una entrada que no sea de confianza puede producir fácilmente saturaciones del búfer. Use fgets
en su lugar.
En C++, estas funciones tienen sobrecargas de plantilla que invocan los homólogos seguros más recientes de estas funciones. Para obtener más información, consulte Sobrecargas de plantilla seguras.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H | _UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_getts |
gets |
gets |
_getws |
Requisitos
Routine | Encabezado necesario |
---|---|
gets |
<stdio.h> |
_getws |
<stdio.h> o <wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// crt_gets.c
// compile with: /WX /W3
#include <stdio.h>
int main( void )
{
char line[21]; // room for 20 chars + '\0'
gets( line ); // C4996
// Danger: No way to limit input to 20 chars.
// Consider using gets_s instead.
printf( "The line entered was: %s\n", line );
}
La entrada de más de 20 caracteres sobreejecutará el búfer de líneas y casi seguramente provocará que el programa se bloquee.
Hello there!The line entered was: Hello there!