標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 |
#include <stdarg.h>
#include <wchar.h>
int vfwprintf(FILE * __restrict__ stream,
const wchar_t * __restrict__ format, va_list arg);
int vswprintf(wchar_t * __restrict__ wcs, size_t n,
const wchar_t * __restrict__ format, va_list arg);
int vwprintf(const wchar_t * __restrict__ format, va_list arg);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <wchar.h>
int vfwprintf_unlocked(FILE * __restrict__ stream,
const wchar_t * __restrict__ format, va_list arg);
int vwprintf_unlocked(const wchar_t * __restrict__ format, va_list arg);
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <stdarg.h>
#include <wchar.h>
int vfwprintf(FILE * __restrict__ stream,
const wchar_t * __restrict__ format, va_list arg);
int vswprintf(wchar_t * __restrict__ wcs, size_t n,
const wchar_t * __restrict__ format, va_list arg);
int vwprintf(const wchar_t * __restrict__ format, va_list arg);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <wchar.h>
int vfwprintf_unlocked(FILE * __restrict__ stream,
const wchar_t * __restrict__ format, va_list arg);
int vwprintf_unlocked(const wchar_t * __restrict__ format, va_list arg);
vswprintf() の場合は、NULL ワイド文字が、書き込まれるワイド文字の末尾に書き込まれます。NULL ワイド文字は、戻りの合計の一部として数えられません。オーバーラップした オブジェクト間でコピーが行われた場合には、動作は未定義です。
vfwprintf_unlocked() および vwprintf_unlocked() は、 スレッド・セーフでないことを除いて、機能的に vfwprintf() および vwprintf() と 等価です。これらの関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、これらの関数を呼び出す場合だけです。
XPG4 の特殊な動作: プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の動作を指定してフィーチャー・テスト・マクロを定義した場合には、_MSE_PROTOS フィーチャー・テスト・マクロも定義して、プログラムのコンパイル時に使用可能な wchar ヘッダーに、vfwprintf()、vswprintf()、または vwprintf() 関数の宣言を行う必要があります。 XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。
正常に実行された場合、vfwprintf()、vswprintf()、および vwprintf() は、終了 NULL ワイド文字をカウントに入れずに、書き込まれたワイド文字の数を戻します。
正常に実行されなかった場合は、負の値が戻されます。
n 文字以上のワイド文字の書き込みが要求された場合、vswprintf() は負の値を戻し、errno を設定してエラーを示します。
⁄* CELEBV06 *⁄
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
void vout(wchar_t *, size_t, wchar_t *, ...);
wchar_t *format3 = L"%S %d %S";
wchar_t *format5 = L"%S %d %S %d %S";
int main(void)
{
wchar_t wcstr[100];
vout(wcstr, 100, format3, L"ONE", 2L, L"THREE");
printf("%S¥n",wcstr);
vout(wcstr, 100, format5, L"ONE", 2L, L"THREE", 4L, L"FIVE");
printf("%S¥n",wcstr);
}
void vout(wchar_t *wcs, size_t n, wchar_t *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
if(vswprintf(wcs, n, fmt, arg_ptr)<0)
perror("vswprintf() error");
va_end(arg_ptr);
}