function
<cwchar>

vfwscanf

int vfwscanf (FILE* stream, const wchar_t* format, va_list arg);
Read formatted data from stream into variable argument list
Reads data from the stream and stores them according to the C wide string format into the locations pointed by the elements in the variable argument list identified by arg.

Internally, the function retrieves arguments from the list identified by arg as if va_arg was used on it, and thus the state of arg is likely to be altered by the call.

In any case, arg should have been initialized by va_start at some point before the call, and it is expected to be released by va_end at some point after the call.

The external representation of wide characters in files are multibyte characters: These are translated as if mbrtowc was called (using the stream's internal mbstate_t object).

This is the wide character equivalent of vfscanf (<cstdio>).

Parameters

stream
Pointer to a FILE object that identifies an input stream.
The stream shall not have an orientation yet, or be wide-oriented (the first i/o operation on a stream determines whether it is byte- or wide- oriented, see fwide).
format
C wide string that contains a format string that follows the same specifications as format in scanf (see scanf for details).
Notice though, that all format specifiers have the same meaning as in scanf; therefore, %lc shall be used to read a wide character (and not %c), as well as %ls shall be used for wide strings (and not %s).
arg
A value identifying a variable arguments list initialized with va_start.
va_list is a special type defined in <cstdarg>.

Return Value

On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror). And, if either happens before any data could be successfully read, EOF is returned.

If an encoding error happens interpreting wide characters, the function sets errno to EILSEQ.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* vfwscanf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>

void ReadWideStuff (FILE * stream, const wchar_t * format, ...)
{
  va_list args;
  va_start (args, format);
  vfwscanf (stream, format, args);
  va_end (args);
}

int main ()
{
  FILE * pFile;
  int val;
  wchar_t str[100];

  pFile = fopen ("myfile.txt","r");

  if (pFile!=NULL) {
    ReadWideStuff ( pFile, L" %ls %d ", str, &val );
    wprintf (L"I have read %ls and %d", str, val);
    fclose (pFile);
  }

  return 0;
}

See also