vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
Defined in header <stdio.h>
|
||
int vscanf( const char *restrict format, va_list vlist ); |
(1) | (since C99) |
int vfscanf( FILE *restrict stream, const char *restrict format, va_list vlist ); |
(2) | (since C99) |
int vsscanf( const char *restrict buffer, const char *restrict format, va_list vlist ); |
(3) | (since C99) |
int vscanf_s(const char *restrict format, va_list vlist); |
(4) | (since C11) |
int vfscanf_s( FILE *restrict stream, const char *restrict format, va_list vlist); |
(5) | (since C11) |
int vsscanf_s( const char *restrict buffer, const char *restrict format, va_list vlist); |
(6) | (since C11) |
Reads data from the a variety of sources, interprets it according to format
and stores the results into locations defined by vlist
.
stream
buffer
. Reaching the end of the string is equivalent to reaching the end-of-file condition for fscanf
- any of the arguments of pointer type is a null pointer
-
format
,stream
, orbuffer
is a null pointer - the number of characters that would be written by%c,%s, or%[, plus the terminating null character, would exceed the second (rsize_t) argument provided for each of those conversion specifiers
- optionally, any other detectable error, such as unknown conversion specifier
- As with all bounds-checked functions,
vscanf_s
,vfscanf_s
, andvsscanf_s
are only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before includingstdio.h
.
Parameters
stream | - | input file stream to read from | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer | - | pointer to a null-terminated character string to read from | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | - | pointer to a null-terminated character string specifying how to read the input.
The format string consists of
The following format specifiers are available:
For every conversion specifier other than All conversion specifiers other than The conversion specifiers The conversion specifiers The correct conversion specifications for the fixed-width integer types ( There is a sequence point after the action of each conversion specifier; this permits storing multiple fields in the same "sink" variable. When parsing an incomplete floating-point value that ends in the exponent with no digits, such as parsing "100er" with the conversion specifier %f, the sequence "100e" (the longest prefix of a possibly valid floating-point number) is consumed, resulting in a matching error (the consumed sequence cannot be converted to a floating-point number), with "r" remaining. Some existing implementations do not follow this rule and roll back to consume only "100", leaving "er", e.g. glibc bug 1765
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vlist | - | variable argument list containing the receiving arguments |
Return value
Notes
All these functions invoke va_arg at least once, the value of arg
is indeterminate after the return. These functions to not invoke va_end, and it must be done by the caller.
Example
#include <stdio.h> #include <stdbool.h> #include <stdarg.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"); }
Output:
Parsing '1 2'...success Parsing '1 a'...failure
References
- C11 standard (ISO/IEC 9899:2011):
- 7.21.6.9 The vfscanf function (p: 327)
- 7.21.6.11 The vscanf function (p: 328)
- 7.21.6.14 The vsscanf function (p: 330)
- K.3.5.3.9 The vfscanf_s function (p: 597-598)
- K.3.5.3.11 The vscanf_s function (p: 599)
- K.3.5.3.14 The vsscanf_s function (p: 602)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.6.9 The vfscanf function (p: 293)
- 7.19.6.11 The vscanf function (p: 294)
- 7.19.6.14 The vsscanf function (p: 295)
See also
(C11)(C11)(C11) |
reads formatted input from stdin, a file stream or a buffer (function) |
(C99)(C11)(C11)(C11)(C11) |
prints formatted output to stdout, a file stream or a buffer using variable argument list (function) |