Compartir a través de


vsscanf, vswscanf

Lee datos con formato de una cadena. Hay disponibles versiones más seguras de estas funciones; consulte vsscanf_s, vswscanf_s.

Sintaxis

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Parámetros

buffer
Datos almacenados

format
Cadena de control de formato. Para obtener más información, vea Formato de campos de especificación: scanf y wscanf funciones.

arglist
Lista de argumentos de variable.

Valor devuelto

Cada una de estas funciones devuelve el número de campos que se convierten y asignan 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 vsscanf lee datos de buffer en las ubicaciones que proporciona cada argumento de la lista de argumentos arglist. Cada argumento de la lista 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.

Importante

Cuando se usa vsscanf para leer una cadena, especifique siempre un ancho para el formato %s (por ejemplo, "%32s" en lugar de "%s"); de lo contrario, la entrada con formato incorrecto puede provocar una saturación del búfer.

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

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_vstscanf vsscanf vsscanf vswscanf

Requisitos

Routine Encabezado necesario
vsscanf <stdio.h>
vswscanf <stdio.h> o <wchar.h>

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

Ejemplo

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

#include <stdio.h>
#include <stdarg.h>

int call_vsscanf(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

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:
    call_vsscanf(tokenstring, "%80s", s);
    call_vsscanf(tokenstring, "%c", &c);
    call_vsscanf(tokenstring, "%d", &i);
    call_vsscanf(tokenstring, "%f", &fp);

    // 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
scanf, _scanf_l, , wscanf, _wscanf_l
sscanf, _sscanf_l, , swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, , _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s