Se recomienda usar Visual Studio 2017

vsscanf_s, vswscanf_s

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Lee datos con formato de una cadena. Estas versiones de vsscanf, vswscanf tienen mejoras de seguridad, como se describe en características de seguridad de CRT.

int vsscanf_s(  
   const char *buffer,  
   const char *format,  
   va_list argptr  
);   
int vswscanf_s(  
   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, consulte campos de especificación de formato: funciones scanf y wscanf.

arglist
Lista de argumentos de variable.

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 leyeron pero no se asignaron. 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 una NULL se invoca el puntero, el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, estas funciones devuelven -1 y establecen errno en EINVAL.

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

El vsscanf_s función lee los datos de buffer en las ubicaciones que se proporcionan en cada argumento de la arglist lista de argumentos. En la lista de argumentos se especifican punteros a variables que tienen un tipo que se corresponde con un especificador de tipo en format. A diferencia de la versión menos segura vsscanf, se requiere un parámetro de tamaño de búfer cuando se utilizan caracteres de campo de tipo c, C, s, S, o conjuntos de control de la cadena que se incluyen en []. El tamaño de búfer en caracteres se debe proporcionar como un parámetro adicional inmediatamente después de cada parámetro de búfer que lo necesite.

El tamaño de búfer incluye el valor nulo final. Se puede usar un campo de especificación del ancho para garantizar que el token se ajustará al búfer. Si no se usa ningún campo de especificación de ancho y la lectura de token es demasiado grande como para ajustarse al búfer, no se escribirá ningún valor en dicho búfer.

Para obtener más información, consulte scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l y scanf caracteres de campo de tipo.

System_CAPS_ICON_note.jpg Nota

El parámetro de tamaño es del tipo unsigned, no size_t.

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_s. Si la copia tiene lugar entre cadenas que se superponen, el comportamiento es indefinido.

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

Asignaciones de rutina de texto genérico

Rutina TCHAR.H_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_vstscanf_svsscanf_svsscanf_svswscanf_s
RutinaEncabezado necesario
vsscanf_s<stdio.h>
vswscanf_s<stdio.h> o <wchar.h>

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

// crt_vsscanf_s.c  
// compile with: /W3  
// This program uses vsscanf_s to read data items  
// from a string named tokenstring, then displays them.  
  
#include <stdio.h>  
#include <stdarg.h>  
#include <stdlib.h>  
  
int call_vsscanf_s(char *tokenstring, char *format, ...)  
{  
    int result;  
    va_list arglist;  
    va_start(arglist, format);  
    result = vsscanf_s(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_s(tokenstring, "%80s", s, _countof(s));  
    call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));  
    call_vsscanf_s(tokenstring, "%d", &i);  
    call_vsscanf_s(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  

Consulte Parse métodos, como System::Double::Parse.

E/S de secuencia
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf, vswscanf

Mostrar: