HOWTO · C
C の書式指定子
これは、C の printf 関数での書式指定子の構文と使用に関するガイドです。
このページの内容
この記事では、C 言語での printf 関数の使用と、この関数で使用される書式指定子について説明します。 この記事では、フォーマット指定子の構文と、それらがさまざまなデータ型にどのように使用されるかについて詳しく説明します。
最初に printf 関数の構文を見てみましょう。
C の printf() 関数の書式指定子
printf() 関数の構文は次のとおりです。
int printf(const char* format, ...);
この関数は、format 変数に格納されている文字列を標準出力コンソールに書き込みます。 この文字列にフォーマット指定子が含まれている場合、つまり、変数を指定するために % 記号で始まるサブ文字列が含まれている場合、これらは文字列の後に指定された値に置き換えられます。
パラメーター:
format
出力に書き込まれるテキストは、この C 文字列に格納されます。 必要に応じて、次の追加の引数で指定された値に置き換えられ、必要に応じてフォーマットされた埋め込みフォーマット指定子をオプションで含めることができます。
フォーマット指定子は次のパターンに従います。
%[flags][width][.precision][length]specifier
角括弧 [] は、これらの指定子がオプションであることを示します。 たとえば、printf("%lu",4294967295) は、4294967295 を符号なしの長い形式で出力することを意味します。
ここで、l は long int の長さ指定子であり、u は unsigned 数の指定子です。 残りのオプション引数は無視されます。
このパターンの最後の specifier は、出力されるデータのタイプを定義するため、最も重要な部分です。 さまざまな指定子とその説明のリストを次の表に示します。
| 指定子 | 説明 |
|---|---|
d または i |
符号付き 10 進整数 |
u |
符号なし 10 進整数 |
o |
符号なし8進数 |
x |
符号なし 16 進数 |
X |
大文字の符号なし 16 進数 |
f |
小文字の 10 進浮動小数点 |
F |
大文字の 10 進浮動小数点 |
c |
キャラクター |
s |
弦 |
a |
小文字の 16 進浮動小数点 |
A |
大文字の 16 進浮動小数点 |
p |
ポインタアドレス |
指定子の前の残りのサブ指定子はすべてオプションですが、その目的は以下に定義されています。
フラグ:
| フラグ | 説明 |
|---|---|
- |
フィールドを左揃えにします。 |
+ |
正の数の前にプラス記号を強制的に配置する |
# |
それぞれ 0、0x、または 0X を配置するための 8 進数および 16 進数の指定子 (o、x、X) に使用されます。 |
0 |
値の左側に 0 を追加します。 |
幅:
| 幅 | 説明 |
|---|---|
(number) |
印刷する最小文字数を指定します。 |
* |
幅は、フォーマット文字列ではなく、フォーマットされる引数の前に追加の整数値引数として指定されます。 |
精度:
| 精度 | 説明 |
|---|---|
.number |
印刷する最小桁数を指定します。 数値の桁数が少ない場合は、左側にゼロが埋め込まれます。 |
.* |
精度は、フォーマット文字列ではなく、フォーマットされる引数の前に追加の整数値引数として指定されます。 |
長さ:
| 長さ | 説明 |
|---|---|
hh |
printf を指定して、整数型の char から拡張された int サイズの整数引数を想定します。 |
h |
printf を指定して、整数型の short から拡張された int サイズの整数引数を想定します。 |
l |
printf を指定して、整数型の long-sized 整数引数を想定します。 これは、浮動小数点型では無視されます。 varargs を使用すると、float 引数は自動的に double に昇格されます。 |
ll |
printf を指定して、整数型の長い大規模な整数引数を想定します。 |
L |
printf を指定して、浮動小数点型の long double 引数を想定します。 |
z |
整数型の場合、printf を指定して、size_t サイズの整数引数を想定します。 |
j |
整数型の場合、printf を指定して、intmax_t サイズの整数引数を想定します。 |
t |
整数型の場合、printf を指定して、ptrdiff_t サイズの整数引数を想定します。 |
...
関数は、フォーマット文字列 (または n の場合は格納場所へのポインター) に応じて、フォーマット文字列のフォーマット指定子を置き換える値を保持する追加の引数のシーケンスを期待する場合があります。
これらのパラメーターの数は、少なくとも、フォーマット指定子で示される値の数と等しくなければなりません。 関数は追加の引数を無視します。
戻り値:
操作が成功すると、書き込まれた文字の合計量が返されます。 エラー表示 (ferror) が設定され、書き込みエラーが発生した場合は負の整数が返されます。
Errno は EILSEQ に設定され、ワイド文字の書き込み中にマルチバイト文字エンコーディング エラーが発生した場合は負の整数が返されます。
例:
#include <stdio.h>
int main() {
printf("Some Character values: %c %c \n", 'b', 66);
printf("Some Decimal Value: %d %ld\n", 1234, 670000L);
printf("Numbers preceeding with blank spaces: %10d \n", 1234);
printf("Numbers preceeding with zeros: %010d \n", 1235);
printf("Different number systems: %d %x %o %#x %#o \n", 100, 100, 100, 100,
100);
return 0;
}
出力:
Some Character values: b B
Some Decimal Value: 1234 670000
Numbers preceeding with blank spaces: 1234
Numbers preceeding with zeros: 0000001235
Different number systems: 100 64 144 0x64 0144