Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. C言語辞典
  3. printf() / fprintf() / sprintf()

printf() / fprintf() / sprintf()

書式文字列を使って値を整形して出力します。『printf()』は標準出力(画面)へ、『fprintf()』は指定したストリーム(ファイルや標準エラー出力)へ書き出します。どちらも『<stdio.h>』に含まれています。

構文
#include <stdio.h>

// 標準出力に書式付きで出力します。
printf(書式文字列, 引数1, 引数2, ...);

// 指定したストリームに書式付きで出力します。
fprintf(ストリーム, 書式文字列, 引数1, 引数2, ...);

// 文字列に書式付きで出力します。
sprintf(バッファ, 書式文字列, 引数1, 引数2, ...);

// 安全なバージョン(バッファサイズを指定します)。
snprintf(バッファ, サイズ, 書式文字列, 引数1, 引数2, ...);
主な書式指定子一覧
指定子対応する型概要
%d / %iint10進数の整数として出力します。
%uunsigned int符号なし10進数として出力します。
%ffloat / double小数点付きの実数として出力します。デフォルトで小数点以下6桁です。
%e / %Efloat / double指数表記で出力します(例:『1.23e+02』)。
%g / %Gfloat / double%f と %e のうち短い方で出力します。
%cchar1文字として出力します。
%schar *ヌル文字まで文字列として出力します。
%pvoid *ポインタのアドレスを16進数で出力します。
%x / %Xunsigned int16進数として出力します。
%ounsigned int8進数として出力します。
%zusize_tsizeof の戻り値など符号なしサイズ型を出力します。
%%文字として『%』を出力します。
サンプルコード
#include <stdio.h>

int main(void) {
    // 基本的な書式指定子の使用例です。
    int    n = 42;
    double d = 3.14159;
    char   c = 'A';
    char  *s = "Hello";

    printf("整数: %d\n",   n); // 『整数: 42』と出力されます。
    printf("実数: %f\n",   d); // 『実数: 3.141590』と出力されます。
    printf("文字: %c\n",   c); // 『文字: A』と出力されます。
    printf("文字列: %s\n", s); // 『文字列: Hello』と出力されます。

    // フラグと幅の指定です。
    printf("[%10d]\n",  n); // 右揃え(幅10): 『[        42]』と出力されます。
    printf("[%-10d]\n", n); // 左揃え(幅10): 『[42        ]』と出力されます。
    printf("[%010d]\n", n); // ゼロ埋め(幅10): 『[0000000042]』と出力されます。

    // 精度の指定です。
    printf("%.2f\n",  d);    // 小数点以下2桁: 『3.14』と出力されます。
    printf("%.5s\n",  s);    // 文字列を5文字に制限: 『Hello』と出力されます。
    printf("%8.2f\n", d);    // 幅8・小数点以下2桁: 『    3.14』と出力されます。

    // fprintf で標準エラー出力にエラーメッセージを出力します。
    fprintf(stderr, "エラーが発生しました。\n");

    // sprintf で文字列バッファに書式付きで書き込みます。
    char buf[64];
    snprintf(buf, sizeof(buf), "点数: %d点", 98);
    printf("%s\n", buf); // 『点数: 98点』と出力されます。

    // 16進数・8進数での出力です。
    printf("16進数: %x\n",  255); // 『ff』と出力されます。
    printf("16進数: %X\n",  255); // 『FF』と出力されます。
    printf("8進数: %o\n",   255); // 『377』と出力されます。
    printf("0xプレフィックス: %#x\n", 255); // 『0xff』と出力されます。

    return 0;
}
概要

書式指定子の一般的な形式は『%[フラグ][幅][.精度]型指定子』です。フラグには左揃え(『-』)・ゼロ埋め(『0』)・符号表示(『+』)などがあります。

書式指定子と引数の型が一致していない場合、未定義動作が発生します。例えば、浮動小数点数に『%d』を使うと誤った値が出力されます。コンパイラの警告を有効にして(例:gcc の『-Wall』オプション)、型の不一致を検出してください。

文字列フォーマットの入力方向(書式付きで読み込む)については『scanf() / fscanf()』を、文字単位の入出力については『putchar() / getchar()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。