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