printf 関数と wprintf 関数の書式指定フィールド
更新 : 2007 年 11 月
ここでは、printf、wprintf、およびそれに関連する関数の書式指定フィールドの構文について説明します。これらの関数のセキュリティを強化したバージョンについては、「printf_s、_printf_s_l、wprintf_s、_wprintf_s_l」を参照してください。関数の詳細については、個々の関数の説明を参照してください。すべての関数の一覧については、「ストリーム入出力」を参照してください。
書式指定は、省略可能なフィールドと必須フィールドを使用して次の形式で行います。
%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type
各書式指定フィールドには、特定の書式を表す 1 つの文字または数字を指定します。最も簡単な書式指定は、パーセント記号と type 文字だけ (%s など) で行います。パーセント記号に続く文字が書式指定として意味がない文字である場合、その文字がそのまま stdout に出力されます。たとえば、パーセント記号自体を出力するには、%% と指定します。
省略可能なフィールドは、type 文字の前に指定します。これらのフィールドでは、次のように書式指定を補足します。
type
必須の文字。関連する argument を文字、文字列、または数値のいずれとして解釈するかを指定します。「printf 関数の型フィールド文字」の「printf 関数の型フィールド文字」の表を参照してください。flags
省略可能な文字または文字列。出力の位置を調整し、記号、空白、小数点、および 8 進数と 16 進数のプリフィックスの出力を制御します。「フラグ ディレクティブ」の「フラグ文字」の表を参照してください。1 つの書式指定で、複数のフラグを指定できます。width
省略可能な数字。出力する最小文字数を指定します。「printf 関数の文字幅指定」を参照してください。precision
省略可能な数字。出力するフィールドの全体または一部に表示する最大文字数、または整数値として表示する最小桁数を指定します。「精度指定」の「型に対する精度指定の効果」の表を参照してください。h| l| ll| I| I32| I64
type の省力可能なプリフィックス。argument のサイズを指定します。「サイズと距離の指定」の "サイズ プリフィックス" の表を参照してください。
セキュリティに関するメモ : |
---|
書式指定文字列にはユーザー定義の文字列を使用しないでください。たとえば、ユーザーに名前を入力するように求め、入力された名前を name という文字列変数に格納するプログラムがあるとします。name を出力する場合、次のコードは使用しないでください。 |
printf( name ); // Danger! If name contains "%s", program will crash
メモ : |
---|
代わりに、次のコードを使用してください。 |
printf( "%s", name );
参照
参照
printf、_printf_l、wprintf、_wprintf_l