
C言語基礎|文字列を書式化して表示
「%s だけじゃもったいない! 幅と精度で“見やすい文字列表示”を自由に整形しよう」
文字列は「そのまま」だけじゃなく、整えて見せられる
C言語で文字列を表示するとき、まずは printf で %s を使えばOKです。
でも、実際のプログラムでは「表みたいに列を揃えたい」「長すぎる文字列は途中まででいい」「左寄せ・右寄せを切り替えたい」みたいな場面がよく出てきます。
そんなときに役立つのが、printf の変換指定(幅、精度、左寄せフラグ)です。
ここを押さえると、画面表示がグッと読みやすくなりますよ。

まずは全体像:文字列の変換指定の形
変換指定の構造(文字列)
% [フラグ] [最小フィールド幅] [.精度] s
図の説明
- フラグ:表示の寄せ方などを指定
- 最小フィールド幅:最低この幅で表示(足りない分は空白で埋める)
- 精度:最大何文字まで表示するか(文字列を切り詰める)
- s:文字列として出す指定
サンプルプログラム
文字列をいろいろな書式で表示するプログラム例です。
プロジェクト名:chap9-5-1 ソースファイル名:chap9-5-1.c
// 文字列をいろいろな書式で表示する
#include <stdio.h>
int main(void)
{
char str[] = "SAKURA";
puts("----- 文字列の書式化表示 -----");
printf("%s\n", str); // そのまま
printf("%3s\n", str); // 最低幅3(短いと空白が入る)
printf("%.3s\n", str); // 3文字まで
printf("%10s\n", str); // 最低幅10で右寄せ
printf("%-10s\n", str); // 最低幅10で左寄せ
return 0;
}このプログラムは、同じ文字列を「幅」「精度」「左寄せ」で見た目を変えて表示します。
実行結果のイメージ(何が起きてる?)
出力結果と意味(str = "SAKURA")
| 書式 | 出力のイメージ | 何が起きる? |
|---|---|---|
| %s | SAKURA | そのまま全部表示 |
| %3s | SAKURA | 幅3は“最低”。文字列が6文字なのでそのまま |
| %.3s | SAK | 最大3文字までに切り詰め |
| %10s | (空白4個)SAKURA | 幅10になるまで左側に空白、右寄せ |
| %-10s | SAKURA(空白4個) | 幅10になるまで右側に空白、左寄せ |
表の説明
- 幅は「最低この幅」。文字列が長ければそのまま出ます。
- 精度は「最大この文字数」。長い場合は途中で切れます。
- 左寄せは - フラグで指定します。
各項目をしっかり理解しよう
変換指定子 s は何をする?
s の役割
| 指定子 | 何を表示する? | どこまで表示する? |
|---|---|---|
| s | 文字列 | 配列の先頭から、最初の \0 の直前まで |
表の説明
%s は「文字列として表示してね」の合図です。
Cの文字列は、\0(ナル文字)で終わる約束なので、\0 の直前までが表示されます。
最小フィールド幅(幅)は何をする?
幅のイメージ
| 書式 | str="SAKURA" のとき | ポイント |
|---|---|---|
| %10s | 右寄せで10幅 | 足りない分は空白で埋める |
| %3s | そのまま | 文字列が長いので幅指定は影響なし |
表の説明
「列を揃える」目的でよく使います。
幅10を指定すると、表示が10文字分の枠に収まるように空白が追加されます。
フラグ - は何をする?
左寄せと右寄せ
| フラグ | 書式例 | 寄せ方 |
|---|---|---|
| なし | %10s | 右寄せ(デフォルト) |
| - | %-10s | 左寄せ |
表の説明
- - を付けるだけで、空白が入る位置が逆になります。表表示で便利です。
精度(.精度)は何をする?
精度で「最大何文字」を決める
| 書式 | str="SAKURA" のとき | 意味 |
|---|---|---|
| %.3s | SAK | 最大3文字だけ表示 |
| %.10s | SAKURA | 最大10文字までOKなので全部表示 |
表の説明
精度は「上限」です。長すぎる文字列を短く見せたいときに役立ちます。
幅と精度を組み合わせるともっと便利
例えば、幅10で右寄せしつつ、最大3文字までにしたいならこうです。
幅と精度の合体
%10.3s
- まず最大3文字までにする → SAK
- その結果を幅10で右寄せ → (空白7個)SAK
命令の書式と「何をする命令か」
ここで出てくるのは主に printf と puts です。
printf の書式と役割
- 書式
printf(書式文字列, 実引数1, 実引数2, ...); - 何をする?
書式文字列に従って、値を整形して標準出力へ表示します。
文字列なら %s を使い、幅や精度、寄せ方も指定できます。
puts の書式と役割
- 書式
puts(文字列); - 何をする?
文字列を表示して、最後に改行を付けます。
書式化はできませんが、見出し表示などに気軽に使えます。
注意ポイント(つまずきやすい所だけ先に押さえる)
よくある注意
| 注意 | 何が起きる? | 対策 |
|---|---|---|
| %s は \0 までしか出ない | 途中に \0 があるとそこで止まる | 文字列の中身を意識する |
| 精度なしで %s | \0 がないと暴走しやすい | 必ず \0 で終わらせる |
| 幅は“最低” | 長い文字列は切れない | 切りたいなら精度を使う |
表の説明
幅だけでは文字列は短くなりません。短くしたいときは精度が必要です。
