wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
ヘッダ <wchar.h> で定義 | ||
(1) | ||
int wprintf(constwchar_t*format, ... ); | (C95以上) (C99未満) | |
int wprintf(constwchar_t*restrict format, ... ); | (C99以上) | |
(2) | ||
int fwprintf(FILE*stream, constwchar_t* format, ... ); | (C95以上) (C99未満) | |
int fwprintf(FILE*restrict stream, constwchar_t*restrict format, ... ); | (C99以上) | |
(3) | ||
int swprintf(wchar_t*buffer, size_t bufsz, constwchar_t* format, ... ); | (C95以上) (C99未満) | |
int swprintf(wchar_t*restrict buffer, size_t bufsz, constwchar_t*restrict format, ... ); | (C99以上) | |
int wprintf_s(constwchar_t*restrict format, ...); | (4) | (C11以上) |
int fwprintf_s(FILE*restrict stream, constwchar_t*restrict format, ...); | (5) | (C11以上) |
int swprintf_s(wchar_t*restrict buffer, rsize_t bufsz, constwchar_t*restrict format, ...); | (6) | (C11以上) |
int snwprintf_s(wchar_t*restrict s, rsize_t n, constwchar_t*restrict format, ...); | (7) | (C11以上) |
指定された位置からデータをロードし、それらをワイド文字列に変換し、結果を様々なシンクに書き込みます。
stream
に書き込みます。bufsz
がゼロより大きい場合は、結果をワイド文字列 buffer
に書き込みます。 最大 bufsz-1 個のワイド文字とそれに続くヌルワイド文字が書き込まれます。 bufsz
がゼロの場合は、何も書き込まれません (buffer
はヌルポインタでも構いません) が、その場合でも戻り値 (本来書き込まれたはずのワイド文字数) は計算され、返されます。format
に変換指定子%n
が存在する。%s
に対応するいずれかの引数がヌルポインタ。format
またはbuffer
がヌルポインタ。bufsz
がゼロまたはRSIZE_MAX/sizeof(wchar_t)
より大きい。- いずれかの文字列または文字変換指定子でエンコーディングエラーが発生する。
- (
swprintf_s
の場合のみ) 書き込まれるワイド文字数 (ヌルを含む) がbufsz
を超える。
s
の指す配列に収まるように切り捨てます。 - すべての境界チェック付き関数と同様に、
wprintf_s
、fwprintf_s
、swprintf_s
およびsnwprintf_s
は __STDC_LIB_EXT1__ が処理系によって定義されていて、<wchar.h>
をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。
目次 |
[編集]引数
stream | - | 書き込む出力ファイルストリーム | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer | - | 書き込むワイド文字列を指すポインタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bufsz | - | 最大 bufsz-1 個のワイド文字およびヌル終端が書き込まれる可能性があります | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | - | データの解釈方法を指定するヌル終端ワイド文字列を指すポインタ。 書式文字列は、変更されずに出力ストリームにコピーされる (
以下の書式指定子が利用できます。
浮動小数点変換関数は無限大を 非数は 変換
固定幅の整数型 (int8_t など) に対する正しい変換指定はヘッダ <inttypes.h> で定義されています (PRIdMAX, PRIuMAX などは メモリに書き込む変換指定子 %n は、書式文字列がユーザ入力に依存する場合、セキュリティエクスプロイトのよくあるターゲットであり、境界チェック付きの 変換指定子それぞれの動作後に副作用完了点があります。 これにより同じ変数に複数の %n の結果を格納することができ、またエッジケースとして、同じ呼び出しの中で先行する %n によって変更された値を表示することができます。 変換指定が無効な場合、動作は未定義です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... | - | 表示するデータを指定する引数。 デフォルト引数昇格後のいずれかの引数が対応する変換指定子の期待する型でない場合、または format が要求するより少ない引数しかない場合、動作は未定義です。 format が要求するより多くの引数がある場合、余分な引数は評価され、無視されます |
[編集]戻り値
size
より大きいまたは等しい (size
がゼロのときも含みます) 場合は負の値。buffer
に書き込まれたワイド文字数 (終端のヌルワイド文字は含みません)。 エンコーディングエラーまたはオーバーフローの場合は負の値を返します。 他のすべてのエラーの場合はゼロを返します。bufsz
が十分に大きければ buffer
に書き込まれたであろうワイド文字数 (終端のヌルワイド文字は含みません)、エラーが発生した場合は負の値 (つまり、書き込みは戻り値が非負かつ bufsz
より小さい場合にのみ成功し、完全になります)。[編集]ノート
ナロー文字列が要求される出力バッファサイズを調べられる snprintf を提供する一方、ワイド文字列に対する同等な関数はありません。 バッファサイズを決定するためには、 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 terminatorsetlocale(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ß水🍌'
[編集]参考文献
- C11 standard (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 standard (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) | ファイルストリームにワイド文字列を書き込みます (関数) |
wprintf, fwprintf, swprintf の C++リファレンス |