C/C++ の書式指定子
C ランタイム ライブラリ リファレンス への移動
書式指定子は、多くの C 関数や UnicodeString などのクラスの RTL で使われます。
書式文字列には、2 種類のオブジェクト-- プレーン形式の文字群と、書式指定子--が含まれています。 通常の文字は、結果の文字列に逐一コピーされます。 書式指定子は、引数リストから引数を取得し、書式設定をそれぞれに適用します。
メモ: 「scanf の書式指定子」および「printf の書式指定子」を参照してください。
C ランタイム書式の種類:
指定子 | 意味 |
---|---|
d, i |
小数または整数。 引数は整数値でなければなりません。 値は 10 進数の文字列に変換されます。 書式文字列に精度指定子が含まれている場合は、結果の文字列に少なくとも指定された桁数がなければならないことを示しています。値の桁数が指定より少ない場合は、結果の文字列の左側がゼロで埋められます。 |
-u |
符号なし整数。 "d" および "i" と同様ですが、符号が付きません。 |
o |
8 進数。 引数は整数値でなければなりません。 値は 8 進数の文字列に変換されます。 書式文字列に精度指定子が含まれている場合は、結果の文字列に少なくとも指定された桁数がなければならないことを示しています。値の桁数が指定より少ない場合は、結果の文字列の左側がゼロで埋められます。 |
x,X |
16 進数。 引数は整数値でなければなりません。 値は 10 進数の文字列に変換されます。 書式文字列に精度指定子が含まれている場合は、結果の文字列に少なくとも指定された桁数がなければならないことを示しています。値の桁数が指定より少ない場合は、結果の文字列の左側がゼロで埋められます。 |
f |
浮動小数点数です。 引数は浮動小数点値でなければなりません。 値は "-ddd.ddd..." という形式の文字列に変換されます。 負の数値の場合、結果の文字列はマイナス記号で始まります。 小数点より後ろの桁数は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルトの 10 進 2 桁と見なされます。 |
e |
科学表記。 引数は浮動小数点値でなければなりません。 値は "-d.ddd...E+ddd" という形式の文字列に変換されます。 負の数値の場合、結果の文字列はマイナス記号で始まります。 小数点の前は必ず 1 桁です。 結果の文字列の総桁数(小数点の前の 1 桁も含む)は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルト精度の 15 と見なされます。 結果の文字列に含まれる指数文字 "E" の後ろには、常に、プラス記号かマイナス記号と、少なくとも 3 桁の数字が続きます。 |
[G] |
倍精度浮動小数点数。 引数は浮動小数点値でなければなりません。 値は、固定形式または科学表記形式を使用して、できるだけ短い 10 進数の文字列に変換されます。 結果の文字列の有効桁数は、書式文字列の精度指定子で指定します。精度指定子がない場合は、デフォルト精度の 15 と見なされます。 末尾のゼロは結果の文字列から削除され、小数点は必要な場合にのみ表示されます。 値の小数点より左の桁数が指定された精度以下で、その値が 0.00001 以上の場合、結果の文字列には固定小数点形式が使われます。 それ以外の場合、結果の文字列には科学表記形式が使われます。 |
c |
文字です。 引数は 1 つの文字値でなければなりません。 |
s |
文字列型 引数は、文字、文字列、または char* 値でなければなりません。 文字列または文字が、書式指定子の代わりに挿入されます。 書式文字列に精度指定子がある場合は、その指定子で結果の文字列の最大長が指定されます。 引数がこの最大長より長い文字列であれば、その文字列は切り詰められます。 |
n |
int を指すポインタ。 これまでに書き込まれた文字数を(入力引数が指している場所に)格納します。 |
p |
ポインタ。 入力引数をポインタとして出力します。書式は、使用しているメモリ モデルによって変わります。 XXXX:YYYY または YYYY(オフセットのみ)になります。 |
メモ: それぞれのデータ型について、長い型には "l" を、短い型には "h" を前に付け加えることができます。 これは、"d"、"i"、"u"、"o"、"x"、"f"、"g" の指定子に適用できます。
たとえば、"%f" の代わりに "%lf" を指定した場合には、対応するパラメータに浮動小数点値ではなく倍精度浮動小数点値を渡す必要があります。
以下は、printf 関数および wprintf 関数を使った例です。
整数/小数:
printf("%d\n", -5); //-5 printf("%i\n", -5); //-5
符号なし:
printf("%u\n", 5); //5
8 進数:
printf("%o\n", 9); //11
小文字および大文字の 16 進数:
printf("%x\n", 15); //f printf("%X\n", 15); //F
浮動小数点数および長い浮動小数点数:
printf("%%f is : %f\n", 1.0/3.0); //0.333333 printf("%%lf is : %lf\n", 5000000000000000.0/2.3); //A big number
科学表記:
printf("%e\n", 5.5); //5.500000e+00
倍精度浮動小数点数:
printf("%g\n", 1.0/3.0); //0.333333
幅指定子および精度指定子:
printf("%f\n", 1.0/3.0); //0.333333 printf("%-5.1f\n", 1.0/3.0); //0.3 printf("%5.1f\n", 1.0/3.0); // 0.3--Two white spaces at the start
文字および文字列:
printf("%c",'a'); printf("%s","string");
ワイド文字列:
wprintf(L"%s", L"string");