The vscanf(), vfscanf(), and vsscanf() functions shall be equivalent to the scanf(), fscanf(), and sscanf() functions, respectively, except that instead of being called with a variable number of arguments, they are called with an argument list as defined in the <stdarg.h> header. These functions shall not invoke the va_end macro. As these functions invoke the va_arg macro, the value of ap after the return is unspecified.
#include <stdio.h> #include <stdarg.h> char buffer[80] = "6 7.0 hoopy"; int my_vfscanf(char *fmt, ...) { va_list argptr; int cnt; fflush(stdin); va_start(argptr, fmt); cnt = vsscanf(buffer, fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber; float fnumber; char string[80]; my_vfscanf("%d %f %s", &inumber, &fnumber, string); printf("%d * %f = %s\n", inumber, fnumber, string); return 0; }
6 * 7.000000 = hoopy