支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


printf と sprintfとは?そしてその違いは?

printf関数 と、sprintf関数 。見た目は似たような関数ですね。この2つの関数がどう違うのか同時に見ていきましょう。 まずはざっくりと簡単に説明してしまうと、下記の通りになります。

printf  → フォーマット済みの文字列を出力する
sprintf → フォーマットされた文字列を返す

出力をする戻すかの違いということです。

printf関数とsprintf関数を使用するために

出力フォーマット指定子になります。こちらを使用してprintf関数、sprintf関数を使っていきますので参考にしていただければと思います。

型指定子

型指定子とは、どのような方で引数を使い、どのように表すのかを指定する指定子となります。

指定子 説明 使用例
%c char 文字を出力 "%c"
%s char* 文字列を出力 "%5s","%-5s"
%d int 10進数で出力 "%05d","%-05d"
%hd short int 半分の精度の10進数で出力 "%10hb"
ld long int 倍精度の10進数で出力 "%-10ld"
%u unsigned int 符号なし整数を10進数で出力 "%5u","%-05u"
%hu unsigned short int 符号なし整数を半分の精度の10進数で出力 "%10hu"
%lu unsigned long int 符号なし整数を倍の精度の10進数で出力 "%10lu"
%o int 8進数で出力 "%05o","%05o"
%x int 16進数を小文字で出力 "%05x"
%X int 16進数を大文字で出力 "%05X"
%f float 実数を出力 "%5.2f"
%lf double 倍の精度の実数を出力 "%8.2lf"
%e float 実数を指数表示を小文字で出力 "%5.2e"
%E float 実数を指数表示を大文字で出力 "%E"
%g float 実数を最適な表示で出力する "%g"

printf関数

printf関数の使い方はよく使われる指定子の下記の例に沿ってみていきましょう。

<形式>

% 表示形式 桁数 .(ピリオド) 指定子

上記のような形式で出力を行っていきます。

<よく使われる指定子での例>

a = 65.123456;
b = 255;

1 //%d
printf("%d", $a);

2 //%u
printf("'%u'", $a);

3 //%f
printf("'%f'", $a);

4 //%c
printf("'%c'", $a);

5 //%s
printf("%s", $a);

上記の出力結果は下記の通りになるはずです。

1 //%d
65

2 //%u
65

3 //%f
65.123456

4 //%c
A

5 //%s
65.123456

その他指定子の例

上記で紹介した指定子のほかに下記のような指定子も存在します。

符号指定子

符号指定子とは、数値に【+/ -】の正負の符号をつけるかを指定する指定子となります。
負の値はデフォルトで符号がつけられますが、正の値にもつけたい場合は【+】を指定すれば符号をつけることが可能となります。


$a = 65.123456;
printf("'%+d'", $a);

結果

+65

パディング指定子

パディング指定子とは後述する表示幅指定子の桁数を満たすために使用する文字列を指定する指定子となります。
半角がデフォルトで表示されます。0か半角スペースを通常は指定しますが、文字列の前にシングルクォートをつけることでそれ以外の文字列の使用が可能となります。


$a = 65.123456; printf("'%010d'", $a);
printf("'%'#10d'", $a);

結果

'0000000065'
'########65'

アラインメント指定子

アラインメント指定子とは、文字列のアラインメントをしていする指定子となります。通常右寄せがデフォルトになっていますが、【-】を指定することにより左寄せとなります。


$a = 65.123456;
printf("'%10d'", $a);
printf("'%-10d'", $a);

結果

' 65'
'65 '

表示幅指定子

表示幅指定子とは、最低何桁で表示するかを数値で指定する指定子となります。0をつけずにパディング指定子を使用しなかった場合は、半角スペースで桁が埋められます。


$a = 65.123456;
printf("'%010d'", $a); printf("'%10d'", $a);

結果

'0000000065'
' 65'

精度指定子

精度指定子とは、浮動小数点数の小数点以下を何桁で表示するかをしていする指定子となります。【.(ピリオド)】に続けて桁数を指定しなければなりません。指定した桁以下は四捨五入されます。

$a = 65.123456;
printf("'%.5f'", $a);

結果

'65.12346'

$a = 65.123456;
printf("'%010d'", $a); printf("'%10d'", $a);

結果

'0000000065'
' 65'

sprintf関数

sprintfはフォーマットされた文字列を返す関数でした。早速使用例を見ていきましょう。 sprintf単体では出力しませんので、sprintfから受け取った文字列をechoで出力を行います。

$format = "名前は、%sで、年齢は%dです。
";
$self1 = sprintf($format, "福岡太郎", 40);
$self2 = sprintf($format, "九州花子", 20);
echo $self1;
echo $self2;

出力結果

名前は、山田太郎で、年齢は40です。
名前は、大阪花子で、年齢は20です。

引数で受け取った値をフォーマット出力する文字列内に複数使用する場合

引数の番号を指定することによって複数回使いまわすことが可能となります。
以下の例を見ていきましょう。

$birth = 30; $name = '福岡県'; $format = '出身は %2$s です。年齢は %1$d です。

年齢は %1$dの出身は %2$s です。';
echo sprintf($format, $age, $name);

出力結果

名前は 山田 です。年齢は 50 です。
年齢は 50の 山田 です。

最後に

ここまでprintf関数sprintf関数についての違い、使い方について解説していきましたが、いかがでしたでしょうか。
指定子については覚えておいて損はありませんので頭にインプットしておくとよいかもしれません。