vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
| ヘッダー <wchar.h> で定義 |
||
| (1) | ||
| int vwprintf( const wchar_t* format, va_list vlist ); |
(C95 以降) (C99まで) |
|
| int vwprintf( const wchar_t* restrict format, va_list vlist ); |
(C99以降) | |
| (2) | ||
| int vfwprintf( FILE* stream, const wchar_t* format, va_list vlist ); |
(C95 以降) (C99まで) |
|
| int vfwprintf( FILE* restrict stream, const wchar_t* restrict format, va_list vlist ); |
(C99以降) | |
| (3) | ||
| int vswprintf( wchar_t* buffer, size_t bufsz, const wchar_t* format, va_list vlist ); |
(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がゼロでない限り、結果のワイド文字列はヌルワイド文字で終端されます。- format に変換指定子
%nが存在する場合 %sに対応する引数がヌルポインタの場合-
formatまたはbufferがヌルポインタである -
bufszがゼロまたはRSIZE_MAX / sizeof(wchar_t)より大きい - 文字列および文字変換指定子でエンコーディングエラーが発生した場合
- (
vswprintf_sのみ)bufferに格納される文字列(後続のワイドヌルを含む)がbufszを超える。
- format に変換指定子
bufferが指す配列に収まるように結果を切り捨てます。- すべての境界チェック付き関数と同様に、
vwprintf_s、vfwprintf_s、vswprintf_s、およびvsnwprintf_sは、実装によって__STDC_LIB_EXT1__が定義されており、ユーザーが__STDC_WANT_LIB_EXT1__を整数定数1として定義している場合にのみ利用可能であることが保証されます。<stdio.h>をインクルードする前。
目次 |
[編集] パラメータ
| stream | - | 書き込み先の出力ワイドストリーム |
| buffer | - | 書き込み先のワイド文字列へのポインタ |
| bufsz | - | 書き込むワイド文字の最大数 |
| format | - | データの解釈方法を指定するヌル終端ワイド文字列へのポインタ |
| vlist | - | 可変引数リスト。印刷するデータが含まれます。 |
format文字列は、通常のワイド文字(%を除く)で構成されており、これらは変更されずに、および変換指定子が出力ストリームにコピーされます。各変換指定子は次の形式です
- 先頭の
%文字。
- 先頭の
- (オプション) 変換の動作を変更する1つ以上のフラグ
-
-: 変換の結果はフィールド内で左寄せされます (デフォルトは右寄せ)。 -
+: 符号付き変換の結果には常に符号が前置されます (デフォルトでは負の場合にのみマイナスが前置されます)。 - space: 符号付き変換の結果が符号文字で始まらない場合、または空の場合、スペースが結果の前に付加されます。
+フラグが存在する場合は無視されます。 -
#: 変換の代替形式が実行されます。正確な効果については以下の表を参照してください。それ以外の場合、動作は未定義です。 -
0: 整数および浮動小数点数の変換の場合、フィールドのパディングにはスペース文字ではなく先行ゼロが使用されます。整数数の場合、精度が明示的に指定されている場合は無視されます。このフラグを使用する他の変換では、未定義の動作が発生します。-フラグが存在する場合は無視されます。
-
- (オプション) 最小フィールド幅を指定する整数値または
*。結果は、右寄せの場合は左側、左寄せの場合は右側に、必要に応じて(デフォルトで)スペース文字でパディングされます。*が使用される場合、幅は int 型の追加引数で指定され、変換される引数の前に配置されます。精度引数がある場合はその後に配置されます。引数の値が負の場合、-フラグが指定されたことになり、フィールド幅は正になります(注:これは最小幅であり、値が切り捨てられることはありません)。
- (オプション) 最小フィールド幅を指定する整数値または
- (オプション) 精度を指定する、整数または
*に続く.、あるいは何もなし。*が使用される場合、精度は int 型の追加引数で指定され、変換される引数の前に配置されます。最小フィールド幅引数がある場合はその後に配置されます。この引数の値が負の場合、無視されます。数値も*も使用されない場合、精度はゼロとみなされます。精度の正確な効果については、以下の表を参照してください。
- (オプション) 精度を指定する、整数または
- (オプション) 引数のサイズを指定する長さ修飾子 (変換フォーマット指定子と組み合わせて、対応する引数の型を指定します)。
- 変換フォーマット指定子。
以下のフォーマット指定子が利用可能です
| 変換 指定子 |
説明 | 期待される 引数型 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 長さ修飾子→ | hh | h | なし | 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 |
di
|
符号付き整数を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 | ||
xX
|
符号なし整数を16進数表現 hhhh に変換します。
|
N/A | ||||||||
u
|
符号なし整数を10進数表現 dddd に変換します。
|
N/A | ||||||||
fF (C99)
|
浮動小数点数を [-]ddd.ddd の形式で10進数表記に変換します。
|
N/A | N/A | double |
double (C99) |
N/A | N/A | N/A | N/A | long double |
eE
|
浮動小数点数を10進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
aA
(C99) |
浮動小数点数を16進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
gG
|
浮動小数点数を値と精度に応じて10進数または10進指数表記に変換します。
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
n
|
この関数への呼び出しによってこれまでに書き込まれた文字数を返します。
|
signed char* |
short* |
int* |
long* |
long long* |
※ |
N/A | ||
p
|
ポインタを定義する実装定義の文字シーケンスを書き込みます。 |
N/A | N/A | void* |
N/A | N/A | N/A | N/A | N/A | N/A |
| 注釈 | ||||||||||
|
浮動小数点変換関数は無限大を 非数は 変換
固定幅文字型(int8_t など)の正しい変換指定子は、ヘッダー <inttypes.h> で定義されています(ただし、PRIdMAX、PRIuMAX などは メモリ書き込み変換指定子 各変換指定子の処理後にはシーケンスポイントが存在します。これにより、同じ変数に複数の 変換指定子が不正な場合、動作は未定義です。 | ||||||||||
[編集] 戻り値
bufszの制限により切り捨てられた場合、関数は、制限が課されなかった場合に書き込まれたであろう文字の合計数(終端のヌルワイド文字を除く)を返します。bufferに書き込まれたワイド文字数(ヌルワイド文字を除く。これは、bufferがヌルポインタではなく、bufszがゼロでもなく、RSIZE_MAX/sizeof(wchar_t)より大きくもない限り常に書き込まれます)、または実行時制約違反の場合はゼロ、エンコーディングエラーの場合は負の値。bufferに書き込まれたであろうワイド文字数(終端のヌル文字を除く。これは、bufferがヌルポインタではなく、bufszがゼロでもなく、RSIZE_MAX/sizeof(wchar_t)より大きくもない限り常に書き込まれます)。bufszが無視された場合。実行時制約違反またはエンコーディングエラーが発生した場合は負の値。[編集] 注記
これらの関数はすべて、少なくとも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、ファイルストリーム、またはバッファに書式化されたワイド文字出力を書き出す (関数) |