Namespaces
Variants

vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s

De es.cppreference.net
< c | io
 
 
Entrada/salida de archivos
Tipos y objetos
        
Funciones
Acceso a archivos
(C95)
Entrada/salida sin formato
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrada formateada
Entrada/salida directa
Salida formateada
Posicionamiento en archivos
Manejo de errores
Operaciones sobre archivos
 
Definido en el encabezado <wchar.h>
int vwscanf( const wchar_t *restrict format, va_list vlist );
(1) (desde C99)
int vfwscanf( FILE *restrict stream,
              const wchar_t *restrict format, va_list vlist );
(2) (desde C99)
int vswscanf( const wchar_t *restrict buffer,
              const wchar_t *restrict format, va_list vlist );
(3) (desde C99)
int vwscanf_s( const wchar_t *restrict format, va_list vlist );
(4) (desde C11)
int vfwscanf_s( FILE *restrict stream,
                const wchar_t *restrict format, va_list vlist );
(5) (desde C11)
int vswscanf_s( const wchar_t *restrict buffer,
                const wchar_t *restrict format, va_list vlist );
(6) (desde C11)

Lee datos de una variedad de fuentes, los interpreta según format y almacena los resultados en ubicaciones definidas por vlist.

1) Lee los datos desde stdin.
2) Lee los datos desde el flujo de archivo stream.
3) Lee los datos desde una cadena ancha terminada en nulo buffer. Llegar al final de la cadena es equivalente a alcanzar la condición de fin de archivo para fwscanf
4-6) Igual que (1-3), excepto que los especificadores de conversión %c, %s y %[ requieren cada uno dos argumentos (el puntero habitual y un valor de tipo rsize_t que indica el tamaño del arreglo receptor, que puede ser 1 al leer con %lc en un solo carácter ancho) y excepto que los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricción instalada actualmente:
  • cualquier argumento de tipo puntero es un puntero nulo
  • format, stream o buffer es un puntero nulo
  • la cantidad de caracteres que se escribirían mediante %c, %s o %[, más el carácter nulo de terminación, excedería el segundo argumento (rsize_t) proporcionado para cada uno de esos especificadores de conversión
  • opcionalmente, cualquier otro error detectable, como un especificador de conversión desconocido
Como con todas las funciones con verificación de límites, vwscanf_s, vfwscanf_s y vswscanf_s solo están garantizadas como disponibles si la implementación define __STDC_LIB_EXT1__ y el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <stdio.h>.

Parámetros

stream - flujo de archivo de entrada desde el cual leer
buffer - puntero a una cadena ancha terminada en nulo desde la cual leer
format - puntero a una cadena ancha terminada en nulo que especifica cómo leer la entrada
vlist - lista de argumentos variables que contiene los argumentos receptores.


La cadena format consiste en

  • caracteres anchos que no son espacio en blanco excepto %: cada uno de esos caracteres en la cadena de formato consume exactamente un carácter idéntico del flujo de entrada, o provoca que la función falle si el siguiente carácter en el flujo no es igual.
  • caracteres de espacio en blanco: cualquier carácter de espacio en blanco individual en la cadena de formato consume todos los caracteres de espacio en blanco consecutivos disponibles de la entrada (determinado como si se llamara a iswspace en un bucle). Tenga en cuenta que no hay diferencia entre "\n", " ", "\t\t" u otro espacio en blanco en la cadena de formato.
  • especificaciones de conversión. Cada especificación de conversión tiene el siguiente formato:
  • carácter introductorio %.
  • (opcional) carácter de supresión de asignación *. Si esta opción está presente, la función no asigna el resultado de la conversión a ningún argumento receptor.
  • (opcional) número entero (mayor que cero) que especifica el ancho de campo máximo, es decir, el número máximo de caracteres que la función puede consumir al realizar la conversión especificada por la especificación de conversión actual. Tenga en cuenta que %s y %[ pueden provocar un desbordamiento del búfer si no se proporciona el ancho.
  • (opcional) modificador de longitud que especifica el tamaño del argumento receptor, es decir, el tipo de destino real. Esto afecta la precisión de la conversión y las reglas de desbordamiento. El tipo de destino predeterminado es diferente para cada tipo de conversión (consulte la tabla a continuación).
  • especificador de formato de conversión.

Los siguientes especificadores de formato están disponibles:

Especificador
de conversión
Explicación Tipo de
argumento esperado
Modificador de longitud → hh h ninguno l ll j z t L
Solo disponible desde C99 → Sí Sí Sí Sí Sí
%
Coincide con el literal %.
N/A N/A N/A N/A N/A N/A N/A N/A N/A
c

Coincide con un carácter o una secuencia de caracteres.

  • Si se usa un especificador de ancho, coincide exactamente con ancho caracteres anchos (el argumento debe ser un puntero a un arreglo con espacio suficiente).
  • A diferencia de %s y %[, no agrega el carácter nulo al arreglo.
N/A N/A
char*
wchar_t*
N/A N/A N/A N/A N/A
s

Coincide con una secuencia de caracteres que no son espacio en blanco (una cadena).

  • Si se usa un especificador de ancho, coincide hasta ancho o hasta el primer carácter de espacio en blanco, lo que ocurra primero.
  • Siempre almacena un carácter nulo además de los caracteres coincidentes (por lo que el arreglo de argumentos debe tener espacio para al menos ancho+1 caracteres).
[conjunto ]

Coincide con una secuencia no vacía de caracteres del conjunto de caracteres.

  • Si el primer carácter del conjunto es ^, entonces se emparejan todos los caracteres que no están en el conjunto.
  • Si el conjunto comienza con ] o ^], el carácter ] también se incluye en el conjunto.
  • Está definido por la implementación si el carácter - en la posición no inicial en el conjunto de exploración puede indicar un rango, como en [0-9].
  • Si se usa un especificador de ancho, solo coincide hasta ancho.
  • Siempre almacena un carácter nulo además de los caracteres coincidentes (por lo que el arreglo de argumentos debe tener espacio para al menos ancho+1 caracteres).
d

Coincide con un entero decimal.

  • El formato del número es el mismo que espera wcstol con el valor 10 para el argumento base.
signed char* o unsigned char*
signed short* o unsigned short*
signed int* o unsigned int*
signed long* o unsigned long*
signed long long* o unsigned long long*
intmax_t* o uintmax_t*
size_t*
ptrdiff_t*
N/A
b (C23)

Coincide con un entero binario sin signo.

  • El formato del número es el mismo que espera wcstoul con el valor 2 para el argumento base.
i

Coincide con un entero.

  • El formato del número es el mismo que espera wcstol con el valor 0 para el argumento base (la base se determina por los primeros caracteres analizados).
u

Coincide con un entero decimal sin signo.

  • El formato del número es el mismo que espera wcstoul con el valor 10 para el argumento base.
o

Coincide con un entero octal sin signo.

  • El formato del número es el mismo que espera wcstoul con el valor 8 para el argumento base.
x
X

Coincide con un entero hexadecimal sin signo.

  • El formato del número es el mismo que espera wcstoul con el valor 16 para el argumento base.
n

Devuelve el número de caracteres leídos hasta ahora.

  • No se consume entrada. No incrementa el conteo de asignación.
  • Si el especificador tiene el operador de supresión de asignación definido, el comportamiento es indefinido.
a (C99)
A (C99)
e
E
f
F (C99)
g
G

Coincide con un número de punto flotante.

  • El formato del número es el mismo que espera wcstof.
N/A N/A
float*
double*
N/A N/A N/A N/A
long double*
p

Coincide con una secuencia definida por la implementación que define un puntero.

  • printfLa familia de funciones %p debe producir la misma secuencia utilizando el especificador de formato
. N/A
void**
N/A N/A N/A N/A N/A N/A
Notas

Para cada especificador de conversión que no sea n, la secuencia más larga de caracteres de entrada que no excede ningún ancho de campo especificado y que es exactamente lo que el especificador de conversión espera o es un prefijo de una secuencia que esperaría, es lo que se consume del flujo. El primer carácter, si lo hay, después de esta secuencia consumida permanece sin leer. Si la secuencia consumida tiene longitud cero o si la secuencia consumida no se puede convertir como se especificó anteriormente, ocurre un error de coincidencia a menos que el final de archivo, un error de codificación o un error de lectura hayan impedido la entrada del flujo, en cuyo caso es un error de entrada.

Excepto para el especificador %, el elemento de entrada (o, para %n, el recuento de caracteres de entrada) primero se convierte a un tipo apropiado para el especificador de conversión. A menos que la asignación se haya suprimido con *, el resultado de la conversión se escribe en el objeto apuntado por el siguiente argumento que aún no se haya escrito. Si este objeto no tiene un tipo apropiado, o si el resultado de la conversión no se puede representar en el objeto, el comportamiento es indefinido.

Todos los especificadores de conversión que no sean [, c y n consumen y descartan todos los caracteres de espacio en blanco iniciales (determinado como si se llamara a iswspace) antes de intentar analizar la entrada. Estos caracteres consumidos no cuentan para el ancho de campo máximo especificado.

Si el especificador de longitud l no se usa, los especificadores de conversión c, s y [ realizan la conversión de carácter ancho a multibyte como si se llamara a wcrtomb con un objeto mbstate_t inicializado a cero antes de que se convierta el primer carácter.

Los especificadores de conversión s y [ siempre almacenan el terminador nulo además de los caracteres coincidentes. El tamaño del arreglo de destino debe ser al menos uno mayor que el ancho de campo especificado. El uso de %s o %[, sin especificar el tamaño del arreglo de destino, es tan inseguro como gets.

Las especificaciones de conversión correctas para los tipos de enteros de ancho fijo (int8_t, etc.) se definen en el encabezado <inttypes.h> (aunque SCNdMAX, SCNuMAX, etc. son sinónimos de %jd, %ju, etc.).

Hay un punto de secuencia después de la acción de cada especificador de conversión; esto permite almacenar múltiples campos en la misma variable "sumidero".

Al analizar un valor de punto flotante incompleto que termina en el exponente sin dígitos, como analizar "100er" con el especificador de conversión %f, la secuencia "100e" (el prefijo más largo de un número de punto flotante posiblemente válido) se consume, lo que resulta en un error de coincidencia (la secuencia consumida no se puede convertir en un número de punto flotante), quedando "r". Algunas implementaciones existentes no siguen esta regla y retroceden para consumir solo "100", dejando "er", por ejemplo, error de glibc 1765.

Si una especificación de conversión no es válida, el comportamiento es indefinido.

Valor de retorno

1-3) Número de argumentos receptores asignados con éxito, o EOF si ocurre un error de lectura antes de que se asignara el primer argumento receptor.
4-6) Igual que (1-3), excepto que EOF también se devuelve si hay una violación de restricción en tiempo de ejecución.

Notas

Todas estas funciones pueden invocar va_arg, el valor de arg es indeterminado después del retorno. Estas funciones no invocan va_end, y debe hacerlo el llamante.

Ejemplo

Referencias

  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.29.2.6 La función vfwscanf (p: 418)
  • 7.29.2.8 La función vswscanf (p: 419)
  • 7.29.2.10 La función vwscanf (p: 420)
  • K.3.9.1.7 La función vfwscanf_s (p: 632-633)
  • K.3.9.1.10 La función vswscanf_s (p: 635-636)
  • K.3.9.1.12 La función vwscanf_s (p: 637)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.24.2.6 La función vfwscanf (p: 364)
  • 7.24.2.8 La función vswscanf (p: 365)
  • 7.24.2.10 La función vwscanf (p: 366)

Véase también

lee entrada de caracteres anchos formateada desde stdin, un flujo de archivo o un búfer
(función)
Documentación de C++ para vwscanf, vfwscanf, vswscanf