std::wprintf、std::fwprintf、std::swprintf
| ヘッダ <cwchar> で定義 |
||
| int wprintf( const wchar_t* format, ... ); |
(1) | |
| int fwprintf( std::FILE* stream, const wchar_t* format, ... ); |
(2) | |
| int swprintf( wchar_t* buffer, std::size_t size, const wchar_t* format, ... ); |
(3) | |
指定された場所からデータをロードし、それらをワイド文字列の等価物に変換して、さまざまなシンクに結果を書き込みます。
目次 |
[編集] パラメーター
| stream | - | 書き込む出力ファイルストリーム |
| buffer | - | 書き込むワイド文字列へのポインター |
| size | - | size - 1 文字まで、およびヌル終端文字を書き込むことができます。 |
| format | - | データの解釈方法を指定するヌル終端ワイド文字列へのポインタ |
| ... | - | 印刷するデータを指定する引数。対応する変換指定子で期待される型ではない型に、デフォルト変換後の引数が変換された場合、または format で必要とされる引数よりも少ない場合、動作は未定義です。 format で必要とされる引数よりも多い引数がある場合、余分な引数は評価されて無視されます。 |
format文字列は、通常のワイド文字(%を除く)で構成されており、これらは変更されずに、および変換指定子が出力ストリームにコピーされます。各変換指定子は次の形式です
- 先頭の
%文字。
- 先頭の
- (オプション) 変換の動作を変更する1つ以上のフラグ
-
-: 変換の結果はフィールド内で左寄せされます (デフォルトは右寄せ)。 -
+: 符号付き変換の結果には常に符号が前置されます (デフォルトでは負の場合にのみマイナスが前置されます)。 - space: 符号付き変換の結果が符号文字で始まらない場合、または空の場合、スペースが結果の前に付加されます。
+フラグが存在する場合は無視されます。 -
#: 変換の代替形式が実行されます。正確な効果については以下の表を参照してください。それ以外の場合、動作は未定義です。 -
0: 整数および浮動小数点数の変換の場合、フィールドのパディングにはスペース文字ではなく先行ゼロが使用されます。整数数の場合、精度が明示的に指定されている場合は無視されます。このフラグを使用する他の変換では、未定義の動作が発生します。-フラグが存在する場合は無視されます。
-
- (オプション) 最小フィールド幅を指定する整数値または
*。必要に応じて、結果はスペース文字でパディングされます (デフォルト)。右寄せの場合は左側に、左寄せの場合は右側にパディングされます。*が使用される場合、幅は int 型の追加の引数によって指定されます。この引数は変換される引数の前に現れ、精度が指定されている場合は精度の引数の前に現れます。引数の値が負の場合、-フラグが指定され、正のフィールド幅になります (注: これは最小幅であり、値が切り捨てられることはありません)。
- (オプション) 最小フィールド幅を指定する整数値または
- (オプション)
.の後に整数値または*が続くか、どちらも続かない精度を指定します。*が使用される場合、精度は int 型の追加の引数によって指定されます。この引数は変換される引数の前に現れますが、最小フィールド幅が指定されている場合はその引数の後に現れます。この引数の値が負の場合、無視されます。数値も*も使用されない場合、精度はゼロとみなされます。精度の正確な効果については以下の表を参照してください。
- (オプション)
- (オプション) 引数のサイズを指定する長さ修飾子 (変換フォーマット指定子と組み合わせて、対応する引数の型を指定します)。
- 変換フォーマット指定子。
以下のフォーマット指定子が利用可能です
| 変換 指定子 |
説明 | 期待される 引数型 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 長さ修飾子→ | hh | h | なし | l | ll | j | z | t | L | |
| C++11からのみ利用可能→ | はい | はい | はい | はい | はい | |||||
%
|
リテラル % を書き込みます。完全な変換指定子は %% でなければなりません。 |
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
単一の文字を書き込みます。
|
N/A | N/A | int |
std::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 |
std::ptrdiff_t の符号なしバージョン |
N/A | ||
xX
|
符号なし整数を16進数表現 hhhh に変換します。
|
N/A | ||||||||
u
|
符号なし整数を10進数表現 dddd に変換します。
|
N/A | ||||||||
fF (C++11)
|
浮動小数点数を [-]ddd.ddd の形式で10進数表記に変換します。
|
N/A | N/A | double |
double (C++11) |
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
(C++11) |
浮動小数点数を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 |
| 注釈 | ||||||||||
|
浮動小数点変換関数は無限大を 非数は 変換 char、 unsigned char、 signed char、 short、および unsigned short を印刷するために使用される変換指定子は、 デフォルト引数プロモーションのプロモートされた型を期待しますが、値を印刷する前に char、 unsigned char、 signed char、 short、および unsigned short に変換されます。可変長引数関数が呼び出されたときに発生するプロモーションがあるため、これらの型の値の受け渡しは安全です。 固定幅文字型 (std::int8_t など) の正しい変換指定子は、ヘッダ <cinttypes> で定義されています (ただし、PRIdMAX, PRIuMAX などは メモリ書き込み変換指定子 各変換指定子の動作の後にはシーケンスポイントがあります。これにより、同じ変数に複数の 変換指定子が不正な場合、動作は未定義です。 | ||||||||||
[編集] 戻り値
[編集] 注意
ナロー文字列は std::snprintf を提供しており、これにより必要な出力バッファサイズを決定できますが、ワイド文字列には相当するものがなく、バッファサイズを決定するために、プログラムは std::swprintf を呼び出し、結果の値をチェックし、より大きなバッファを再割り当てして、成功するまで再試行する必要がある場合があります。
[編集] 例
#include <clocale> #include <cwchar> #include <iostream> #include <locale> int main() { 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 std::setlocale(LC_ALL, "en_US.utf8"); std::swprintf(warr, sizeof warr/sizeof *warr, L"Converted from UTF-8: '%s'", narrow_str); std::wcout.imbue(std::locale("en_US.utf8")); std::wcout << warr << '\n'; }
出力
Converted from UTF-8: 'zß水🍌'
[編集] 関連項目
| (C++11) |
stdout、ファイルストリーム、またはバッファにフォーマットされた出力を書き込む (関数) |
| stdout、ファイルストリームに書式付きワイド文字出力を書き込む または可変長引数リストを使用してバッファから (関数) | |
| ファイルストリームにワイド文字列を書き込む (関数) | |
| Cドキュメント wprintf、fwprintf、swprintf
| |