vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
| ヘッダ <wchar.h>
|
||
int vwprintf( const wchar_t* format, va_list vlist );
|
で定義されています。 (1) | (C95 以降) (C99 まで) |
int vwprintf( const wchar_t* restrict format, va_list vlist );
|
(C99 以降) | |
int vfwprintf( FILE* stream, const wchar_t* format, va_list vlist );
|
(2) | (C95 以降) (C99 まで) |
int vfwprintf( FILE* restrict stream,
const wchar_t* restrict format, va_list vlist );
|
(C99 以降) | |
int vswprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, va_list vlist );
|
(3) | (C95 以降) (C99 まで) |
int vswprintf( wchar_t* restrict buffer, size_t bufsz,
const wchar_t* restrict format, va_list vlist );
|
(C99 以降) | |
int vwprintf_s( const wchar_t* restrict format, va_list vlist);
|
(4) | (C11 以降) |
int vfwprintf_s( FILE* restrict stream,
const wchar_t* restrict format, va_list vlist);
|
(5) | (C11 以降) |
int vswprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, va_list vlist);
|
(6) | (C11 以降) |
int vsnwprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, va_list vlist);
|
(7) | (C11 以降) |
vlist で指定された場所からデータを読み込み、ワイド文字相当に変換して、様々な出力先に書き込みます。
stream に書き込みます。buffer に書き込みます。最大 bufsz - 1 個のワイド文字を書き込んだ後、ナルワイド文字を書き込みます。結果のワイド文字列は、bufsz がゼロでない限り、ナルワイド文字で終端されます。- 変換指定子
%nがformat - に存在する場合
%sの対応する引数のいずれかがヌルポインタである場合 formatまたはbufferがヌルポインタである場合bufszがゼロであるかRSIZE_MAX / sizeof(wchar_t)- より大きい場合
- 文字と文字変換指定子でエンコードエラーが発生した場合
vswprintf_s(bufferのみ)bufszに格納される文字列(末尾のワイドナルを含む)が
buffer と同じですが、vwprintf_s すべての境界チェック付き関数と同様に、vfwprintf_s、vswprintf_s、vsnwprintf_s、__STDC_LIB_EXT1__ は、実装が __STDC_WANT_LIB_EXT1__ を定義していて、ユーザーが 1 をインクルードする前に < を整数定数 > に定義した場合にのみ利用可能であることが保証されます。パラメータ
| stream | - | 書き込み先の出力ワイドストリーム |
| buffer | - | 書き込み先のワイド文字列へのポインタ |
| bufsz | - | 書き込む最大ワイド文字数 |
| format | - | データの解釈方法を指定するnull終端ワイド文字列へのポインタ |
| vlist | - | 可変引数リスト 出力するデータを含む |
書式文字列は、出力ストリームに変更されずにコピーされる通常のワイド文字(
%
を除く)と変換指定子で構成されます。各変換指定子は以下の形式を持ちます:
-
-
導入
%文字。
-
導入
-
- (オプション) 変換の動作を変更する1つ以上のフラグ:
-
-
-: 変換結果がフィールド内で左揃えされます(デフォルトでは右揃え)。 -
+: 符号付き変換の場合、常に符号が変換結果の前に付加されます(デフォルトでは負の場合のみマイナス記号が付きます)。 -
space
: 符号付き変換の結果が符号文字で始まらない場合、または空の場合、スペースが結果の前に付加されます。
+フラグが存在する場合は無視されます。 -
#: 変換の 代替形式 が実行されます。正確な効果については以下の表を参照してください。それ以外の場合の動作は未定義です。 -
0: 整数および浮動小数点数変換の場合、 space 文字の代わりに先行ゼロを使用してフィールドが埋められます。整数の場合、精度が明示的に指定されている場合は無視されます。このフラグを使用した他の変換の動作は未定義です。-フラグが存在する場合は無視されます。
-
-
-
(オプション)
整数値または
*で、最小フィールド幅を指定します。結果は、必要に応じて、右揃えの場合は左側に、左揃えの場合は右側に、 スペース 文字(デフォルト)でパディングされます。*が使用される場合、幅は int 型の追加引数で指定され、この引数は変換対象の引数と、精度を指定する引数(存在する場合)の前に配置されます。引数の値が負の場合、-フラグが指定され、正のフィールド幅となります(注: これは最小幅です: 値が切り詰められることはありません。)。
-
(オプション)
整数値または
-
-
(オプション)
.に続けて整数値または*を指定するか、あるいは何も指定せずに変換の 精度 を指定する。*が使用される場合、 精度 は int 型の追加引数によって指定され、この引数は変換対象の引数の前に、最小フィールド幅を指定する引数(存在する場合)の後に現れる。この引数の値が負の場合、無視される。数値も*も使用されない場合、精度はゼロと見なされる。 精度 の正確な効果については下記の表を参照のこと。
-
(オプション)
-
- (optional) 長さ修飾子 引数のサイズを指定する(変換形式指定子と組み合わせて、対応する引数の型を指定します)。
-
- 変換フォーマット指定子。
以下のフォーマット指定子が利用可能です:
|
変換
指定子 |
説明 |
期待される
引数の型 |
||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 長さ修飾子→ | hh | h | none | l | ll | j | z | t | L | |
| C99以降でのみ利用可能→ | 可 | 可 | 可 | 可 | 可 | |||||
%
|
リテラル
%
を書き出す。完全な変換指定は
%%
でなければならない。
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
単一文字を書き込みます。
|
N/A | N/A |
int
|
wint_t
|
N/A | N/A | N/A | N/A | N/A |
s
|
文字列 を書き込みます。
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
d
i
|
符号付き整数を10進数表現 [-]dddd に変換します。
|
signed
char
|
short
|
int
|
long
|
long
long
|
※
|
N/A | ||
o
|
符号なし整数 を8進数表現 oooo に変換します。
|
unsigned
char
|
unsigned
short
|
unsigned
int
|
unsigned
long
|
unsigned
long
long
|
ptrdiff_t
の符号なしバージョン
|
N/A | ||
x
X
|
符号なし整数 を16進数表現 hhhh に変換します。
|
N/A | ||||||||
u
|
unsigned integer を10進数表現 dddd に変換します。
|
N/A | ||||||||
f
F
(C99)
|
浮動小数点数を [-]ddd.ddd スタイルの10進表記に変換します。
|
N/A | N/A |
double
|
double
(C99)
|
N/A | N/A | N/A | N/A |
long
double
|
e
E
|
浮動小数点数を10進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
a
A
(C99) |
浮動小数点数を16進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
g
G
|
浮動小数点数を値と精度に応じて10進数表記または10進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
n
|
この関数呼び出しでこれまでに 書き込まれた文字数 を返します。
|
signed
char
*
|
short
*
|
int
*
|
long
*
|
long
long
*
|
intmax_t
*
|
※
|
該当なし | |
p
|
実装定義の文字シーケンスを書き込み、 pointer を定義します。 |
N/A | N/A |
void
*
|
N/A | N/A | N/A | N/A | N/A | N/A |
| 注記 | ||||||||||
|
浮動小数点変換関数は、無限大を
非数は
変換指定子
char , unsigned char , signed char , short , および unsigned short を表示するための変換指定子は、 デフォルト引数プロモーション の昇格後の型を期待しますが、表示前にその値は char , unsigned char , signed char , short , および unsigned short に変換されます。可変引数関数が呼び出されるときに行われるプロモーションにより、これらの型の値を渡すことは安全です。
固定幅文字型(
int8_t
など)の正しい変換指定は、ヘッダ
<inttypes.h>
で定義されています(ただし
PRIdMAX
,
PRIuMAX
などは
メモリ書き込み変換指定子
各変換指定子の動作の後には
シーケンスポイント
があります。これにより、複数の
変換指定が無効な場合、動作は未定義です。 |
||||||||||
戻り値
RSIZE_MAX/sizeof(wchar_t)
を超えない場合、常に書き込まれる))、または実行時制約違反の場合はゼロ、エンコーディングエラーの場合は負の値。
RSIZE_MAX/sizeof(wchar_t)
以下である限り、常に書き込まれる)、これは
bufsz
が無視された場合に
buffer
に書き込まれたであろう値、またはランタイム制約違反もしくはエンコーディングエラーが発生した場合は負の値。
注記
これらの関数はすべて少なくとも1回 va_arg を呼び出し、 arg の値は返却後に不定となります。これらの関数は va_end を呼び出さないため、呼び出し元が実行する必要があります。
ナロー文字列は
vsnprintf
を提供しており、必要な出力バッファサイズを決定することが可能ですが、ワイド文字列には同等の機能がありません(C11のvsnwprintf_sまで)。バッファサイズを決定するために、プログラムは
vswprintf
を呼び出し、結果の値をチェックし、より大きなバッファを再割り当てして、成功するまで再試行する必要がある場合があります。
vsnwprintf_s
は、
vswprintf_s
とは異なり、配列
buffer
が指す領域に収まるように結果を切り詰めます。ただし、ほとんどの境界チェック付き関数では、切り詰めはエラーとして扱われます。
例
#include <locale.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
void debug_wlog(const wchar_t* fmt, ...)
{
struct timespec ts;
timespec_get(&ts, TIME_UTC);
char time_buf[100];
size_t rc = strftime(time_buf, sizeof time_buf, "%D %T", gmtime(&ts.tv_sec));
snprintf(time_buf + rc, sizeof time_buf - rc, ".%06ld UTC", ts.tv_nsec / 1000);
va_list args;
va_start(args, fmt);
wchar_t buf[1024];
int rc2 = vswprintf(buf, sizeof buf / sizeof *buf, fmt, args);
va_end(args);
if (rc2 > 0)
wprintf(L"%s [debug]: %ls\n", time_buf, buf);
else
wprintf(L"%s [debug]: (string too long)\n", time_buf);
}
int main(void)
{
setlocale(LC_ALL, "");
debug_wlog(L"Logging, %d, %d, %d", 1, 2, 3);
}
出力例:
02/20/15 22:12:38.476575 UTC [debug]: Logging, 1, 2, 3
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.29.2.5 vfwprintf関数 (p: TBD)
-
- 7.29.2.7 vswprintf関数 (p: TBD)
-
- 7.29.2.9 vwprintf関数 (p: TBD)
-
- K.3.9.1.6 vfwprintf_s関数 (p: TBD)
-
- K.3.9.1.8 vsnwprintf_s関数 (p: TBD)
-
- K.3.9.1.9 vswprintf_s関数 (p: TBD)
-
- K.3.9.1.11 vwprintf_s関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.29.2.5 vfwprintf関数 (p: TBD)
-
- 7.29.2.7 vswprintf関数 (p: TBD)
-
- 7.29.2.9 vwprintf関数 (p: TBD)
-
- K.3.9.1.6 vfwprintf_s関数 (p: TBD)
-
- K.3.9.1.8 vsnwprintf_s関数 (p: TBD)
-
- K.3.9.1.9 vswprintf_s関数 (p: TBD)
-
- K.3.9.1.11 vwprintf_s関数 (p: TBD)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.29.2.5 vfwprintf関数 (p: 417-418)
-
- 7.29.2.7 vswprintf関数 (p: 419)
-
- 7.29.2.9 vwprintf関数 (p: 420)
-
- K.3.9.1.6 vfwprintf_s関数 (p: 632)
-
- K.3.9.1.8 vsnwprintf_s関数 (p: 633-634)
-
- K.3.9.1.9 vswprintf_s関数 (p: 634-635)
-
- K.3.9.1.11 vwprintf_s関数 (p: 636)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.24.2.5 vfwprintf関数 (p: 363)
-
- 7.24.2.7 vswprintf関数 (p: 364)
-
- 7.24.2.9 vwprintf関数 (p: 365)
関連項目
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
可変長引数リストを使用して
stdout
、ファイルストリーム、またはバッファに
フォーマット済み出力を書き込む (関数) |
|
(C95)
(C95)
(C95)
(C11)
(C11)
(C11)
(C11)
|
ワイド文字のフォーマット済み出力を
stdout
、ファイルストリーム、またはバッファに書き込む
(関数) |
|
C++ドキュメント
for
vwprintf
,
vfwprintf
,
vswprintf
|
|