C言語学習ポータル(無料版) 学習コンテンツ つまずきとエラー printf の書式指定子と型が合っていない

🚪 はじめてのC

printf の書式指定子と型が合っていない

どんなときに起きるか

printf("%d\n", 3.14); が 0 や意味不明な数を表示します。printf("%s\n", 5); は Segmentation fault。gcc: warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]。

なぜそうなるのか

printf は可変長引数なので、渡された値の本当の型を知る手段がありません。書式指定子だけを信じてメモリを読むため、型がずれると読み出す幅も解釈も狂います。

直し方・再発防止

主要な対応を覚えます: int=%d / unsigned=%u / long=%ld / size_t=%zu / float・double=%f(floatは可変長引数でdoubleに昇格します)/ char*=%s / ポインタ=%p。-Wall の書式警告をゼロに保つのが最良の再発防止です。

scanfの恐怖(4コマ漫画)
4コマで見る「scanfの恐怖」

アプリでしっかり学ぶ(無料・登録不要) つまずき一覧へ

同じ場面で起きやすいつまずき

セミコロンの書き忘れerror: expected ';' before 'printf' や error: expected ';… scanf で & を付け忘れるscanf("%d", n); と書くと gcc は warning: format '%d' expects … scanf のあとに改行が残るscanf("%d", &age); の次に置いた scanf("%c", &c) や fgets が、入力を待…

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH