wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
| ヘッダで定義 <wchar.h>
|
||
int wprintf( const wchar_t* format, ... );
|
(1) | (C95 から) (C99 までは) |
int wprintf( const wchar_t* restrict format, ... );
|
(C99 から) | |
int fwprintf( FILE* stream, const wchar_t* format, ... );
|
(2) | (C95 から) (C99 までは) |
int fwprintf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(C99 から) | |
int swprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, ... );
|
(3) | (C95 から) (C99 までは) |
int swprintf( wchar_t* restrict buffer, size_t bufsz,
const wchar_t* restrict format, ... );
|
(C99 から) | |
int wprintf_s( const wchar_t* restrict format, ... );
|
(4) | (C11 から) |
int fwprintf_s( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(5) | (C11 から) |
int swprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, ... );
|
(6) | (C11 から) |
int snwprintf_s( wchar_t* restrict s, rsize_t n,
const wchar_t* restrict format, ... );
|
(7) | (C11 から) |
指定された場所からデータを読み込み、ワイド文字列に変換し、結果をさまざまな出力先に書き込みます。
stream に書き込みます。bufsz が 0 より大きい場合、結果をワイド文字列 buffer に書き込みます。最大 bufsz - 1 ワイド文字を書き込み、その後ろにヌルワイド文字が続きます。bufsz が 0 の場合は何も書き込まれません (その場合 buffer はヌルポインタでも構いません)。- 変換指定子
%nがformat - に存在する
%sの対応する引数のいずれかがヌルポインタである formatまたはbufferがヌルポインタであるbufszが 0 であるかRSIZE_MAX / sizeof(wchar_t)- より大きい
- 文字列および文字の変換指定子でエンコードエラーが発生する
swprintf_s(bufszのみ) 書き込まれるワイド文字数 (ヌルを含む) が
s と同じですが、wprintf_s 他のすべての境界チェック関数と同様に、fwprintf_s、swprintf_s、snwprintf_s は、実装によって __STDC_LIB_EXT1__ が定義されており、ユーザーが __STDC_WANT_LIB_EXT1__ を整数定数 1 として <stdio.h> をインクルードする前に定義する場合にのみ利用できることが保証されます。引数
| stream | - | 書き込む出力ファイルストリーム |
| buffer | - | 書き込むワイド文字列へのポインタ |
| bufsz | - | 最大 bufsz - 1 ワイド文字 (ヌル終端を含む) が書き込まれます
|
| format | - | データの解釈方法を指定するヌル終端ワイド文字列へのポインタ |
| ... | - | 出力するデータを指定する引数。デフォルト引数昇格 後の引数が対応する変換指定子の期待する型でない場合、または format が必要とするよりも少ない引数しかない場合、動作は未定義です。format が必要とするよりも多くの引数がある場合、余分な引数は評価され無視されます。
|
format 文字列は、そのまま出力ストリームにコピーされる通常のワイド文字 (% を除く) と、変換指定から構成されます。各変換指定は以下の形式を持ちます:
- 導入の
%文字。
- 導入の
- (省略可能) 変換の動作を変更する1つ以上のフラグ:
-: 変換結果はフィールド内で左詰めになります (デフォルトでは右詰め)。+: 符号付き変換の符号は常に変換結果の前に付加されます (デフォルトでは負の場合にのみマイナスが前に付きます)。- 空白: 符号付き変換の結果が符号文字で始まらない場合、または空の場合、空白が結果の前に付加されます。
+フラグが存在する場合は無視されます。 #: 変換の代替形式 が実行されます。詳細な効果は以下の表を参照してください。そうでない場合、動作は未定義です。0: 整数および浮動小数点数の変換では、フィールドのパディングに 空白 文字の代わりに先頭のゼロが使用されます。整数の場合、精度が明示的に指定されると無視されます。その他の変換でこのフラグを使用すると、動作は未定義になります。-フラグが存在する場合は無視されます。
- (省略可能) 最小フィールド幅を指定する整数値または
*。結果は、必要に応じて、右詰めの場合は左側に、左詰めの場合は右側に 空白 文字でパディングされます (デフォルト)。*が使用された場合、幅はint型の追加の引数によって指定され、その引数は変換される引数 (および精度が指定されている場合はそれを指定する引数) の前に現れます。引数の値が負の場合、-フラグが指定され、正のフィールド幅になります (注意: これは最小幅であり、値が切り詰められることはありません)。
- (省略可能) 最小フィールド幅を指定する整数値または
- (省略可能)
.に続いて整数、または*、またはどちらもなしで、変換の精度 を指定します。*が使用された場合、精度 はint型の追加の引数によって指定され、その引数は変換される引数の前、かつ最小フィールド幅が指定されている場合はその引数の後に現れます。この引数の値が負の場合は無視されます。数値も*も使用されない場合、精度は 0 と見なされます。精度 の正確な効果は以下の表を参照してください。
- (省略可能)
- (省略可能) 長さ修飾子 は、引数のサイズを指定します (変換書式指定子と組み合わせて、対応する引数の型を指定します)。
- 変換書式指定子。
以下の書式指定子が利用可能です:
| 変換
指定子 |
説明 | 期待される
引数の型 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 長さ修飾子→ | hh | h | なし | l | ll | j | z | t | L | |
| C99 からのみ利用可能→ | Yes | Yes | Yes | Yes | Yes | |||||
%
|
リテラル % を書き込みます。完全な変換指定は %% でなければなりません。
|
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 |
intmax_t |
※ |
ptrdiff_t |
N/A |
bB (省略可能)
(C23) |
符号なし整数 を2進数表現 bbbb に変換します。
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
ptrdiff_t |
の符号なしバージョンN/A |
o
|
符号なし整数 を8進数表現 oooo に変換します。
|
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* |
intmax_t * |
※ |
ptrdiff_t * |
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 以上だった場合 (bufsz がゼロの場合を含む) は負の値。buffer に書き込まれたワイド文字数 (終端のヌルは含まない)。エンコードエラーおよびオーバーフロー時には負の値を返します。その他のエラーではゼロを返します。buffer が十分な大きさであった場合に bufsz に書き込まれたであろうワイド文字数 (終端のヌルは含まない)、またはエラーが発生した場合は負の値 (つまり、書き込みが成功して完全に行われたのは、戻り値が非負で bufsz 未満の場合のみです)。ノート
ナロー文字列には snprintf があり、必要な出力バッファサイズを決定できますが、ワイド文字列には同等のものはありませんでした ( までは)snwprintf_s(C11 から)。そのため、プログラムはバッファサイズを決定するために、 を呼び出し、結果を確認し、より大きなバッファを再割り当てして、成功するまで繰り返す必要があるかもしれません。
swprintf
snwprintf_s は、swprintf_s とは異なり、buffer が指す配列に収まるように結果を切り詰めます。ただし、ほとんどの境界チェック関数では切り詰めはエラーとして扱われます。
例
#include <locale.h>
#include <wchar.h>
int main(void)
{
char narrow_str[] = "z\u00df\u6c34\U0001f34c";
// or "zß水🍌"
// or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator
setlocale(LC_ALL, "en_US.utf8");
swprintf(warr, sizeof warr / sizeof* warr,
L"Converted from UTF-8: '%s'", narrow_str);
wprintf(L"%ls\n", warr);
}
出力:
Converted from UTF-8: 'zß水🍌'
参考文献
- C23 規格 (ISO/IEC 9899:2024):
- 7.29.2.1 The fwprintf function (p: TBD)
- 7.29.2.3 The swprintf function (p: TBD)
- 7.29.2.11 The wprintf function (p: TBD)
- K.3.9.1.1 The fwprintf_s function (p: TBD)
- K.3.9.1.4 The swprintf_s function (p: TBD)
- K.3.9.1.13 The wprintf_s function (p: TBD)
- C17 規格 (ISO/IEC 9899:2018):
- 7.29.2.1 The fwprintf function (p: TBD)
- 7.29.2.3 The swprintf function (p: TBD)
- 7.29.2.11 The wprintf function (p: TBD)
- K.3.9.1.1 The fwprintf_s function (p: TBD)
- K.3.9.1.4 The swprintf_s function (p: TBD)
- K.3.9.1.13 The wprintf_s function (p: TBD)
- C11 規格 (ISO/IEC 9899:2011):
- 7.29.2.1 The fwprintf function (p: 403-410)
- 7.29.2.3 The swprintf function (p: 416)
- 7.29.2.11 The wprintf function (p: 421)
- K.3.9.1.1 The fwprintf_s function (p: 628)
- K.3.9.1.4 The swprintf_s function (p: 630-631)
- K.3.9.1.13 The wprintf_s function (p: 637-638)
- C99 規格 (ISO/IEC 9899:1999):
- 7.24.2.1 The fwprintf function (p: 349-356)
- 7.24.2.3 The swprintf function (p: 362)
- 7.24.2.11 The wprintf function (p: 366)
関連項目
(C99)(C11)(C11)(C11)(C11) |
書式付き出力を stdout、ファイルストリーム、またはバッファに出力します (関数) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
可変引数リストを使用して、書式付きワイド文字出力を stdout、ファイルストリーム またはバッファに出力します (関数) |
(C95) |
ワイド文字列をファイルストリームに書き込みます (関数) |
C++ ドキュメント for wprintf, fwprintf, swprintf
| |