vsscanf_s
, vswscanf_s
Lee datos con formato de una cadena. Estas versiones de , vswscanf
tienen mejoras devsscanf
seguridad, como se describe en Características de seguridad de CRT.
Sintaxis
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, 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_s
lee datos de buffer
en las ubicaciones que proporciona cada argumento de la lista de argumentos arglist
. Los argumentos de la lista de argumentos especifican punteros a variables que tienen un tipo que se corresponde con un especificador de tipo de format
. A diferencia de la versión vsscanf
menos segura, se requiere un parámetro de tamaño de búfer cuando se usan los caracteres de campo de tipo c, C, s, S o conjuntos de control de cadena que se incluyen en [].. El tamaño del búfer en caracteres debe proporcionarse como otro parámetro inmediatamente después de cada parámetro de búfer que lo requiera.
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 el token leído en es demasiado grande para caber en el búfer, no se escribe nada en ese búfer.
Para obtener más información, vea scanf_s
Caracteres de campo de tipo scanf , wscanf_s
_scanf_s_l
, _wscanf_s_l
y scanf.
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 hexadecimales o "zona de compatibilidad" de ancho completo Unicode. De lo contrario, los objetos vswscanf_s
y vsscanf_s
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_s |
vsscanf_s |
vsscanf_s |
vswscanf_s |
Requisitos
Routine | Encabezado necesario |
---|---|
vsscanf_s |
<stdio.h> |
vswscanf_s |
<stdio.h> o <wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// 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
Vea también
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