### vswprintf -- Format and Write Wide Characters to Buffer

Format

>     #include <stdarg.h>
>     #include <wchar.h>
>     int vswprintf(wchar_t *wcsbuffer, size_t n,
>                   const wchar_t *format, va_list argptr);

Language Level: ANSI 93
vswprintf formats and stores a series of wide characters and values in the buffer wcsbuffer. vswprintf works just like swprintf, except that argptr points to a list of wide-character arguments whose number can vary from call to call. These arguments should be initialized by va_start for each call. In contrast, swprintf can have a list of arguments, but the number of arguments in that list are fixed when you compile in the program.

The value n specifies the maximum number of wide characters to be written, including the terminating null character.

vswprintf converts each entry in the argument list according to the corresponding wide-character format specifier in format. The format has the same form and function as the format string for printf, with the following exceptions:

- %c (without an l prefix) converts an integer argument to wchar_t, as if by calling mbtowc.
- %lc converts a wint_t to wchar_t.
- %s (without an l prefix); converts an array of multibyte characters to an array of wchar_t, as if by calling mbrtowc. The array is written up to, but not including, the terminating null character, unless the precision specifies a shorter output.
- %ls writes an array of wchar_t. The array is written up to, but not including, the terminating null character, unless the precision specifies a shorter output.

For a complete description of format specifiers, see printf -- Print Formatted Characters.

A null wide character is added to the end of the wide characters written; the null wide character is not counted as part of the returned value. If copying takes place between objects that overlap, the behavior is undefined.

If you specify a null string for the %s or %ls format specifier, vswprintf prints (null).

Return Value
vswprintf returns the number of bytes written in the array, not counting the terminating null wide character.

Example
This example creates a function vout that takes a variable number of wide-character arguments and uses vswprintf to print them to wcstr.

    #include <stdio.h>
    #include <stdarg.h>
    #include <wchar.h>

    wchar_t *format3 = L"%ls  %d  %ls";
    wchar_t *format5 = L"%ls  %d  %ls  %d  %ls";

    void vout(wchar_t *wcs, size_t n, wchar_t *fmt, ...)
    {
       va_list arg_ptr;

       va_start(arg_ptr, fmt);
       vswprintf(wcs, n, fmt, arg_ptr);
       va_end(arg_ptr);
       return;
    }

    int main(void)
    {
       wchar_t wcstr[100];

       vout(wcstr, 100, format3, L"ONE", 2L, L"THREE");
       printf("%ls\n", wcstr);
       vout(wcstr, 100, format5, L"ONE", 2L, L"THREE", 4L, L"FIVE");
       printf("%ls\n", wcstr);
       return 0;

       /************************************************************
          The output should be similar to:

          ONE  2  THREE
          ONE  2  THREE  4  FIVE
       ************************************************************/
    }

printf -- Print Formatted Characters
swprintf -- Format and Write Wide Characters to Buffer
vfprintf -- Print Argument Data to Stream
vprintf -- Print Argument Data
vsprintf -- Print Argument Data to Buffer
<stdarg.h>
<wchar.h>