printf()

2015年5月9日
1 分

printf() はこれまでにも使ってきたけど改めて。一般的な形式は次のとおり。

printf(制御文字列, ...);

「…」の部分は可変長の引数で、制御文字列内に現れるフォーマット指定子に(数、順番ともに)対応する。printf() 自体は出力した文字数を返す。
フォーマット指定子は次のものがある。

%c 文字
%d 符号付き10進整数
%i 符号付き10進整数
%e 指数部付き表記(小文字)
%E 指数部付き表記(大文字)
%f 10進の浮動小数点数
%g %eと%fのいずれか短いほう
%G %Eと%fのいずれか短いほう
%o 符号なし8進数
%s 文字列
%u 符号なし10進数
%x 符号なし16進数(小文字)
%X 符号なし16進数(大文字)
%p ポインタを表示
%n 対応する引数は整数へのポインタでなければならず、その領域にこれまで出力された文字数を書き込む
%% %記号

%%、%c、%p、%n以外は最小フィールド幅指定子と精度指定子を指定できる。また、デフォルトでは数値は右詰めで表示されるけど、-記号をつけることで左詰めにできる。ま、だいたいわかるな。

ちょっとわかりづらいのは %n だ。これは出力するためのものではなくて、出力した文字数を保存するためのものだ。次のプログラムはその例。

#include

int main(void)
{
    int i;

    printf("%d %f\n%n", 100, 123.45, &i);
    printf("Output %d characters\n", i);

    return 0;
}
takatoh@nightschool $ ./sample_8_5
100 123.450000
Output 15 characters

%n が現れるまでに 15 文字出力したと(15 文字目は改行文字)。