【C言語】文字列の一部を表示する|部分文字列の出力【printf substringイディオム】

C言語のprintf文では文字列を表示する際に、指定の長さによる文字列出力が可能となっています。

文字列出力時に出力可能な最大幅を指示したい場合には、書式指定子として%.幅sを用います。の部分には出力可能な最大幅をバイト数として記述します。

printf("%.1s", "abcd"); // "a"
printf("%.2s", "abcd"); // "ab"
printf("%.3s", "abcd"); // "abc"
printf("%.9s", "abcd"); // "abcd"
printf("%.s", "abcd");  // "" (省略時は幅0)
printf("%4.2s", "abcd");   // "  ab" (右詰めとの組み合わせ)
printf("%-4.2s", "abcd");  // "ab  " (左詰めとの組み合わせ)
printf("%.2s", "abcd" + 2); // "cd"  (部分文字列の表示)

幅を動的に指定したい場合には、変換指定子の幅に*を指定し、実引数側に実際の幅をint型の数値で指定します。

printf("%.*s", 3, "abcd"); // "abc"

文字列ポインタへのオフセットを指定すれば、部分文字列(substring)の表示を実現することも可能となります。

const char *s = "abcdef";
printf("%.*s", 3, s + 2);  // "cde"

このprintf関数とオフセットによるイディオムを用いれば、文字列の切り出し処理が不要となり、部分文字列用の領域の確保やコピー処理なども不要となります。

広告
広告