C++ vfwprintf()

The vfwprintf() function in C++ is used to write a formatted wide string to a file stream.

The vfwprintf() function is defined in <cwchar> header file.

vfwprintf() prototype

int vfwprintf( FILE* stream, const wchar_t* format, va_list vlist );

The vfwprintf() function writes the wide string pointed to by format to the file stream stream. The wide string format may contain format specifiers starting with % which are replaced by the values of variables that are passed as a list vlist.


vfwprintf() Parameters

  • stream: Output file stream to write the result.
  • format: A pointer to a null terminated wide string that is written to stream. It consists of characters along with optional format specifiers starting with %. The format specifiers are replaced by the values of respective variables that follows format.
    The format specifier has the following parts:
    • A leading % sign
    • Flags: Optional one or more flags that modifies the conversion behavior.
      • - : Left justify the result within the field. By default it is right justified.
      • + : The sign of the result is attached to the beginning of the value, even for positive results.
      • Space: If there is no sign, a space is attached to the beginning of the result.
      • # : An alternative form of the conversion is performed.
      • 0 : It is used for integer and floating point number. Leading zeros are used to pad the numbers instead of space.
    • Width: An optional * or integer value used to specify minimum width field.
    • Precision : An optional field consisting of a . followed by * or integer or nothing to specify the precision.
    • Length : An optional length modifier that specifies the size of the argument.
    • Specifier: A conversion format specifier. The available format specifiers are as follows:
    Format specifiers
    Format Specifier Description
    % Prints %
    c Writes a single character
    s Writes a character string
    d or i Converts a signed integer to decimal representation
    o Converts an unsigned integer to octal representation
    X or x Converts an unsigned integer to hexadecimal representation
    u Converts an unsigned integer to decimal representation
    F or f Converts floating-point number to the decimal representation
    E or e Converts floating-point number to the decimal exponent notation
    A or a Converts floating-point number to the hexadecimal exponent
    G or g Converts floating-point number to either decimal or decimal exponent notation
    n Returns the number of characters written so far by this call to the function. The result is written to the value pointed to by the argument
    p Writes an implementation defined character sequence defining a pointer.

    So the general format of format specifier is:
    %[flags][width][.precision][length]specifier
  • vlist: A list of arguments containing the data to write.

vfwprintf() Return value

  • If successful, the vfwprintf() function returns number of wide characters written.
  • On failure it returns a negative value.

Example: How vfwprintf() function works?

#include <cwchar>
#include <cstdarg>
#include <clocale>

void write(const wchar_t *fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	vfwprintf(fmt, args);
	va_end(args);
}

int main ()
{
	wchar_t desc[5][10] = {L"Eta",L"Theta",L"Iota",L"Kappa",L"Lamda"};
	int x = 0;

	setlocale(LC_ALL, "en_US.UTF-8");
	wprintf(L"Some Greek Letters\n");
	for (wchar_t i=L'\u03b7'; i<=L'\u03bb'; i++)
	{
		write(L"%ls : %lc\n", desc[x], i);
		x++;
	}

	return 0;
}

When you run the program, the following will be written to example.txt:

Some Greek Letters
Eta : η
Theta : θ
Iota : ι
Kappa : κ
Lamda : λ