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
.
stdin
stream
buffer
. Reaching the end of the string is equivalent to reaching the end-of-file condition for fscanf
%c
, %s
, and %[
conversion specifiers each expect two arguments (the usual pointer and a value of type rsize_t
indicating the size of the receiving array, which may be 1 when reading with a %c into a single char) and except that the following errors are detected at runtime and call the currently installed constraint handler function: format
, stream
, or buffer
is a null pointer vscanf_s
, vfscanf_s
, and vsscanf_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 including stdio.h
.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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vlist | - | variable argument list containing the receiving arguments |
EOF
if read failure occurs before the first receiving argument was assigned.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.
#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
(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 bufferusing variable argument list (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/io/vfscanf