vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
| Definido en el encabezado <stdio.h>
|
||
int vscanf( const char* restrict format, va_list vlist );
|
(1) | (desde C99) |
int vfscanf( FILE* restrict stream, const char* restrict format,
va_list vlist );
|
(2) | (desde C99) |
int vsscanf( const char* restrict buffer, const char* restrict format,
va_list vlist );
|
(3) | (desde C99) |
int vscanf_s(const char* restrict format, va_list vlist);
|
(4) | (desde C11) |
int vfscanf_s( FILE* restrict stream, const char* restrict format,
va_list vlist);
|
(5) | (desde C11) |
int vsscanf_s( const char* restrict buffer, const char* 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 las ubicaciones definidas por vlist.
streambuffer. Alcanzar el final de la cadena equivale a alcanzar la condición de fin de archivo para fscanf%c, %s y %[ especificadores de conversión esperan 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 %c en un solo char) y excepto que los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricciones instalada actualmente:
- cualquier argumento de tipo puntero es un puntero nulo
format,streamobufferes un puntero nulo- el número de caracteres que se escribirían con %c, %s o %[, más el carácter nulo terminador, 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
vscanf_s, vfscanf_s y vsscanf_s solo se garantiza que estén disponibles si __STDC_LIB_EXT1__ es definido por la implementación y si 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 del cual leer |
| buffer | - | puntero a una cadena de caracteres terminada en nulo desde la cual leer |
| format | - | puntero a una cadena de caracteres terminada en nulo que especifica cómo leer la entrada |
| vlist | - | lista de argumentos variable que contiene los argumentos receptores. |
La cadena format consiste en
- caracteres multibyte que no son espacios 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 isspace en un bucle). Tenga en cuenta que no hay diferencia entre
"\n"," ","\t\t"u otros espacios en blanco en la cadena de formato. - especificaciones de conversión. Cada especificación de conversión tiene el siguiente formato:
- carácter introductorio
%.
- 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) carácter de supresión de asignación
- (opcional) número entero (mayor que cero) que especifica el ancho máximo de campo, 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
%sy%[pueden provocar un desbordamiento del búfer si no se proporciona el ancho.
- (opcional) número entero (mayor que cero) que especifica el ancho máximo de campo, 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
- (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 (ver 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 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.
|
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 espacios en blanco (una cadena).
| |||||||||
[conjunto ]
|
Coincide con una secuencia no vacía de caracteres del conjunto de caracteres.
| |||||||||
d
|
Coincide con un entero decimal.
|
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.
| |||||||||
i
|
Coincide con un entero.
| |||||||||
u
|
Coincide con un entero decimal sin signo.
| |||||||||
o
|
Coincide con un entero octal sin signo.
| |||||||||
xX
|
Coincide con un entero hexadecimal sin signo.
| |||||||||
n
|
Devuelve el número de caracteres leídos hasta ahora.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Coincide con un número de punto flotante.
|
N/A | N/A | float* |
double* |
N/A | N/A | N/A | N/A | long double* |
p
|
Coincide con una secuencia de caracteres definida por la implementación que identifica un puntero.
|
. | N/A | void** |
N/A | N/A | N/A | N/A | N/A | N/A |
| Notas | ||||||||||
|
Para cada especificador de conversión distinto de Excepto para el especificador Todos los especificadores de conversión excepto Los especificadores de conversión Los especificadores de conversión Las especificaciones de conversión correctas para los tipos enteros de ancho fijo (int8_t, etc.) se definen en el encabezado <inttypes.h> (aunque SCNdMAX, SCNuMAX, etc. son sinónimos de Hay un punto de secuencia después de la acción de cada especificador de conversión; esto permite almacenar varios campos en la misma variable "sumidero". Al analizar un valor de punto flotante incompleto que termina en el exponente sin dígitos, como analizar Si una especificación de conversión no es válida, el comportamiento no está definido. | ||||||||||
Valor de retorno
Notas
Todas estas funciones invocan va_arg al menos una vez, el valor de arg es indeterminado después del retorno. Estas funciones no invocan va_end, y debe hacerlo el llamante.
Ejemplo
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
bool checked_sscanf(int count, const char* buf, const char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int rc = vsscanf(buf, fmt, ap);
va_end(ap);
return rc == count;
}
int main(void)
{
int n, m;
printf("Parsing '1 2'...");
if (checked_sscanf(2, "1 2", "%d %d", &n, &m))
puts("success");
else
puts("failure");
printf("Parsing '1 a'...");
if (checked_sscanf(2, "1 a", "%d %d", &n, &m))
puts("success");
else
puts("failure");
}
Salida:
Parsing '1 2'...success
Parsing '1 a'...failure
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.21.6.9 La función vfscanf (p: TBD)
- 7.21.6.11 La función vscanf (p: TBD)
- 7.21.6.14 La función vsscanf (p: TBD)
- K.3.5.3.9 La función vfscanf_s (p: TBD)
- K.3.5.3.11 La función vscanf_s (p: TBD)
- K.3.5.3.14 La función vsscanf_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.21.6.9 La función vfscanf (p: TBD)
- 7.21.6.11 La función vscanf (p: TBD)
- 7.21.6.14 La función vsscanf (p: TBD)
- K.3.5.3.9 La función vfscanf_s (p: TBD)
- K.3.5.3.11 La función vscanf_s (p: TBD)
- K.3.5.3.14 La función vsscanf_s (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
- 7.21.6.9 La función vfscanf (p: 327)
- 7.21.6.11 La función vscanf (p: 328)
- 7.21.6.14 La función vsscanf (p: 330)
- K.3.5.3.9 La función vfscanf_s (p: 597-598)
- K.3.5.3.11 La función vscanf_s (p: 599)
- K.3.5.3.14 La función vsscanf_s (p: 602)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.19.6.9 La función vfscanf (p: 293)
- 7.19.6.11 La función vscanf (p: 294)
- 7.19.6.14 La función vsscanf (p: 295)
Véase también
(C11)(C11)(C11) |
lee entrada formateada desde stdin, un flujo de archivo o un búfer (función) |
(C99)(C11)(C11)(C11)(C11) |
imprime salida formateada en stdout, un flujo de archivo o un búfer usando una lista de argumentos variable (función) |
Documentación de C++ para vscanf, vfscanf, vsscanf
| |