printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
| ヘッダー <stdio.h> で定義 |
||
| (1) | ||
| int printf( const char* format, ... ); |
(C99まで) | |
| int printf( const char* restrict format, ... ); |
(C99以降) | |
| (2) | ||
| int fprintf( FILE* stream, const char* format, ... ); |
(C99まで) | |
| int fprintf( FILE* restrict stream, const char* restrict format, ... ); |
(C99以降) | |
| (3) | ||
| int sprintf( char* buffer, const char* format, ... ); |
(C99まで) | |
| int sprintf( char* restrict buffer, const char* restrict format, ... ); |
(C99以降) | |
| int snprintf( char* restrict buffer, size_t bufsz, const char* restrict format, ... ); |
(4) | (C99以降) |
| int printf_s( const char* restrict format, ... ); |
(5) | (C11 以降) |
| int fprintf_s( FILE* restrict stream, const char* restrict format, ... ); |
(6) | (C11 以降) |
| int sprintf_s( char* restrict buffer, rsize_t bufsz, const char* restrict format, ... ); |
(7) | (C11 以降) |
| int snprintf_s( char* restrict buffer, rsize_t bufsz, const char* restrict format, ... ); |
(8) | (C11 以降) |
指定された場所からデータをロードし、それらを文字列表現に変換し、結果をさまざまなシンク/ストリームに書き込みます。
- format に変換指定子
%nが存在する場合 %sに対応する引数がヌルポインタの場合- stream、format、または buffer がヌルポインタの場合
- bufsz がゼロまたは RSIZE_MAX より大きい場合
- 文字列および文字変換指定子でエンコーディングエラーが発生した場合
- (
sprintf_sのみ) buffer に格納される文字列(末尾のヌルを含む)が bufsz を超える場合。
- format に変換指定子
- すべての境界チェック付き関数と同様に、
printf_s、fprintf_s、sprintf_s、およびsnprintf_sが利用可能であることは、実装によって __STDC_LIB_EXT1__ が定義されており、ユーザーが <stdio.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ保証されます。
目次 |
[edit] パラメータ
| stream | - | 書き込む出力ファイルストリーム |
| buffer | - | 書き込み先の文字列へのポインタ |
| bufsz | - | 最大 bufsz - 1 文字、およびヌル終端文字が書き込まれる場合があります。 |
| format | - | データの解釈方法を指定するヌル終端バイト文字列へのポインタ。 |
| ... | - | 印刷するデータを指定する引数。 デフォルト引数プロモーション後の引数が、対応する変換仕様で期待される型(期待される型はプロモートされた型またはプロモートされた型の互換性のある型)でない場合、または format によって必要とされる引数より少ない場合、動作は未定義です。format によって必要とされる引数より多い場合、余分な引数は評価されて無視されます。 |
format 文字列は、出力ストリームにそのままコピーされる通常のバイト文字 (% を除く) と、変換指定子で構成されます。各変換指定子は以下の形式を持ちます。
- 先頭の
%文字。
- 先頭の
- (オプション) 変換の動作を変更する1つ以上のフラグ
-
-: 変換の結果はフィールド内で左寄せされます (デフォルトは右寄せ)。 -
+: 符号付き変換の結果には常に符号が前置されます (デフォルトでは負の場合にのみマイナスが前置されます)。 - space: 符号付き変換の結果が符号文字で始まらない場合、または空の場合、スペースが結果の前に付加されます。
+フラグが存在する場合は無視されます。 -
#: 変換の代替形式が実行されます。正確な効果については以下の表を参照してください。それ以外の場合、動作は未定義です。 -
0: 整数および浮動小数点数の変換の場合、フィールドのパディングにはスペース文字ではなく先行ゼロが使用されます。整数数の場合、精度が明示的に指定されている場合は無視されます。このフラグを使用する他の変換では、未定義の動作が発生します。-フラグが存在する場合は無視されます。
-
- (オプション) 最小フィールド幅を指定する整数値または
*。結果は、右寄せの場合は左側、左寄せの場合は右側に、必要に応じて(デフォルトで)スペース文字でパディングされます。*が使用される場合、幅は int 型の追加引数で指定され、変換される引数の前に配置されます。精度引数がある場合はその後に配置されます。引数の値が負の場合、-フラグが指定されたことになり、フィールド幅は正になります(注:これは最小幅であり、値が切り捨てられることはありません)。
- (オプション) 最小フィールド幅を指定する整数値または
- (オプション) 精度を指定する、整数または
*に続く.、あるいは何もなし。*が使用される場合、精度は int 型の追加引数で指定され、変換される引数の前に配置されます。最小フィールド幅引数がある場合はその後に配置されます。この引数の値が負の場合、無視されます。数値も*も使用されない場合、精度はゼロとみなされます。精度の正確な効果については、以下の表を参照してください。
- (オプション) 精度を指定する、整数または
- (オプション) 引数のサイズを指定する長さ修飾子 (変換フォーマット指定子と組み合わせて、対応する引数の型を指定します)。
- 変換フォーマット指定子。
以下のフォーマット指定子が利用可能です
| 変換 指定子 |
説明 | 期待される 引数型 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 長さ修飾子→ | hh | h | なし | l | ll | j | z | t | L | |
| C99以降のみ利用可能→ | はい | はい | はい | はい | はい | |||||
%
|
リテラル % を書き込みます。完全な変換指定子は %% でなければなりません。 |
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 |
※ |
N/A | ||
o
|
符号なし整数を8進数表現 oooo に変換します。
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
ptrdiff_t の符号付きバージョン。 |
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* |
※ |
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 に変換されます。可変引数関数が呼び出されるときに発生するプロモーションにより、これらの型の値を渡すことは安全です。 固定幅文字型(int8_t など)の正しい変換指定子は、ヘッダー <inttypes.h> で定義されています(ただし、PRIdMAX、PRIuMAX などは メモリ書き込み変換指定子 各変換指定子の処理後にはシーケンスポイントが存在します。これにより、同じ変数に複数の 変換指定子が不正な場合、動作は未定義です。 | ||||||||||
[edit] 戻り値
[edit] 注釈
C標準およびPOSIXでは、引数が宛先バッファと重複する場合の sprintf およびそのバリアントの動作は未定義であると規定しています。例
sprintf(dst, "%s and %s", dst, t); // <- broken: undefined behavior
POSIXは、エラー時に errno が設定されることを規定しています。また、引数の並べ替え( % の直後の n$ は n 番目の引数を示す)など、追加の変換指定子を規定しています。
bufsz がゼロで buffer がヌルポインタの場合の snprintf の呼び出しは、出力を格納するために必要なバッファサイズを決定するのに役立ちます。
snprintf_s は snprintf と同様ですが、sprintf_s とは異なり、出力を bufsz - 1 に収まるように切り捨てます。
[edit] 例
#include <inttypes.h> #include <stdint.h> #include <stdio.h> int main(void) { const char* s = "Hello"; printf("Strings:\n"); // same as puts("Strings"); printf(" padding:\n"); printf("\t[%10s]\n", s); printf("\t[%-10s]\n", s); printf("\t[%*s]\n", 10, s); printf(" truncating:\n"); printf("\t%.4s\n", s); printf("\t%.*s\n", 3, s); printf("Characters:\t%c %%\n", 'A'); printf("Integers:\n"); printf("\tDecimal:\t%i %d %.6i %i %.0i %+i %i\n", 1, 2, 3, 0, 0, 4,-4); printf("\tHexadecimal:\t%x %x %X %#x\n", 5, 10, 10, 6); printf("\tOctal:\t\t%o %#o %#o\n", 10, 10, 4); printf("Floating-point:\n"); printf("\tRounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3); printf("\tPadding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); printf("\tScientific:\t%E %e\n", 1.5, 1.5); printf("\tHexadecimal:\t%a %A\n", 1.5, 1.5); printf("\tSpecial values:\t0/0=%g 1/0=%g\n", 0.0 / 0.0, 1.0 / 0.0); printf("Fixed-width types:\n"); printf("\tLargest 32-bit value is %" PRIu32 " or %#" PRIx32 "\n", UINT32_MAX, UINT32_MAX ); }
実行結果の例
Strings:
padding:
[ Hello]
[Hello ]
[ Hello]
truncating:
Hell
Hel
Characters: A %
Integers:
Decimal: 1 2 000003 0 +4 -4
Hexadecimal: 5 a A 0x6
Octal: 12 012 04
Floating-point:
Rounding: 1.500000 2 1.30000000000000004440892098500626
Padding: 01.50 1.50 1.50
Scientific: 1.500000E+00 1.500000e+00
Hexadecimal: 0x1.8p+0 0X1.8P+0
Special values: 0/0=-nan 1/0=inf
Fixed-width types:
Largest 32-bit value is 4294967295 or 0xffffffff[edit] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 7.21.6.1 The fprintf function (p: TBD)
- 7.21.6.3 The printf function (p: TBD)
- 7.21.6.5 The snprintf function (p: TBD)
- 7.21.6.6 The sprintf function (p: TBD)
- K.3.5.3.1 The fprintf_s function (p: TBD)
- K.3.5.3.3 The printf_s function (p: TBD)
- K.3.5.3.5 The snprintf_s function (p: TBD)
- K.3.5.3.6 The sprintf_s function (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.21.6.1 The fprintf function (p: 225-230)
- 7.21.6.3 The printf function (p: 236)
- 7.21.6.5 The snprintf function (p: 237)
- 7.21.6.6 The sprintf function (p: 237)
- K.3.5.3.1 The fprintf_s function (p: 430)
- K.3.5.3.3 The printf_s function (p: 432)
- K.3.5.3.5 The snprintf_s function (p: 432-433)
- K.3.5.3.6 The sprintf_s function (p: 433)
- C11標準 (ISO/IEC 9899:2011)
- 7.21.6.1 The fprintf function (p: 309-316)
- 7.21.6.3 The printf function (p: 324)
- 7.21.6.5 The snprintf function (p: 325)
- 7.21.6.6 The sprintf function (p: 325-326)
- K.3.5.3.1 The fprintf_s function (p: 591)
- K.3.5.3.3 The printf_s function (p: 593-594)
- K.3.5.3.5 The snprintf_s function (p: 594-595)
- K.3.5.3.6 The sprintf_s function (p: 595-596)
- C99標準 (ISO/IEC 9899:1999)
- 7.19.6.1 The fprintf function (p: 274-282)
- 7.19.6.3 The printf function (p: 290)
- 7.19.6.5 The snprintf function (p: 290-291)
- 7.19.6.6 The sprintf function (p: 291)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.9.6.1 The fprintf function
- 4.9.6.3 The printf function
- 4.9.6.5 The sprintf function
[edit] 関連項目
| (C95)(C95)(C95)(C11)(C11)(C11)(C11) |
stdout、ファイルストリーム、またはバッファに書式化されたワイド文字出力を書き出す (関数) |
| (C99)(C11)(C11)(C11)(C11) |
stdout、ファイルストリーム、またはバッファに書式化された出力を書き出す 可変長引数リストを使用する (関数) |
| ファイルストリームに文字列を書き込む (関数) | |
| (C11)(C11)(C11) |
stdin、ファイルストリーム、またはバッファから書式化された入力を読み込む (関数) |
| C++ ドキュメント (printf, fprintf, sprintf, snprintf)
| |