Compartir por


sscanf, _sscanf_l, , swscanf, _swscanf_l

Lea datos con formato de una cadena. Hay disponibles versiones más seguras de estas funciones; consulte sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l.

Sintaxis

int sscanf(
   const char *buffer,
   const char *format [,
   argument ] ...
);
int _sscanf_l(
   const char *buffer,
   const char *format,
   _locale_t locale [,
   argument ] ...
);
int swscanf(
   const wchar_t *buffer,
   const wchar_t *format [,
   argument ] ...
);
int _swscanf_l(
   const wchar_t *buffer,
   const wchar_t *format,
   _locale_t locale [,
   argument ] ...
);

Parámetros

buffer
Datos almacenados

format
Cadena de control de formato. Para obtener más información, vea sintaxis de especificación de formato.

argument
Argumentos opcionales

locale
Configuración regional que se va a usar

Valor devuelto

Cada una de estas funciones devuelve el número de campos convertidos y asignados correctamente; el valor devuelto no incluye los campos que se han leído pero no se han asignado. Un valor devuelto de 0 indica que no se ha asignado ningún campo. El valor devuelto es EOF en caso de error o si el final de la cadena se alcanza antes de la primera conversión.

Si buffer o format es un NULL puntero, se invoca el 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 -1 y establecen errno en EINVAL.

Para información sobre estos y otros códigos de error, consulte errno, _doserrno_sys_errlist y _sys_nerr.

Comentarios

La función sscanf lee datos de buffer en la ubicación proporcionada por cada argument. Cada argument debe ser un puntero a una variable que tenga un tipo que se corresponda con un especificador de tipo en format. El argumento format controla la interpretación de los campos de entrada y tiene el mismo formato y función que el argumento format para la función scanf. Si la copia tiene lugar entre cadenas que se superponen, el comportamiento es indefinido.

Para obtener información sobre los caracteres de campo de tipo scanf, vea scanf caracteres de campo de tipo. Para obtener información sobre los campos de especificación de formato scanf, vea Campos de especificación de formato.

Importante

Al leer una cadena con sscanf, especifique siempre un ancho para el formato %s (por ejemplo, "%32s" en lugar de "%s"); si no se hace así, el formato incorrecto de la entrada puede provocar una saturación del búfer.

swscanf es una versión con caracteres anchos de sscanf; los argumentos a swscanf son cadenas de caracteres anchos. sscanf no controla caracteres hexadecimales multibyte. swscanf no controla caracteres hexadecimales o "zona de compatibilidad" de ancho completo Unicode. De lo contrario, los objetos swscanf y sscanf se comportan de forma idéntica.

Las versiones de estas funciones con el sufijo _l son idénticas salvo que usan el parámetro locale pasado en lugar de la configuración regional del subproceso actual.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_stscanf sscanf sscanf swscanf
_stscanf_l _sscanf_l _sscanf_l _swscanf_l

Requisitos

Routine Encabezado necesario
sscanf, _sscanf_l <stdio.h>
swscanf, _swscanf_l <stdio.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>

int main( void )
{
   char  tokenstring[] = "15 12 14...";
   char  s[81];
   char  c;
   int   i;
   float fp;

   // Input various data from tokenstring:
   // max 80 character string:
   sscanf( tokenstring, "%80s", s ); // C4996
   sscanf( tokenstring, "%c", &c );  // C4996
   sscanf( tokenstring, "%d", &i );  // C4996
   sscanf( tokenstring, "%f", &fp ); // C4996
   // Note: sscanf is deprecated; consider using sscanf_s instead

   // Output the data read
   printf( "String    = %s\n", s );
   printf( "Character = %c\n", c );
   printf( "Integer:  = %d\n", i );
   printf( "Real:     = %f\n", fp );
}
String    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000

Vea también

E/S de secuencia
fscanf, _fscanf_l, , fwscanf, _fwscanf_l
scanf, _scanf_l, , wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, , _swprintf_l, __swprintf_l
snprintf, _snprintf, _snprintf_l, , _snwprintf, _snwprintf_l