コード:
#include <stdio.h>
int main(void)
{
printf(" [%8s] [%8s]\n", "abcdef", "ghijkl");
printf(" [%-8s] [%-8s]\n", "abcdef", "ghijkl");
printf(" [%8.8s] [%8.8s]\n", "abcdef", "ghijkl");
printf(" [%.8s] [%.8s]\n", "abcdef", "ghijkl");
printf(" [%8s] [%8s]\n", "abcdefghi", "jklmnopqr");
printf(" [%-8s] [%-8s]\n", "abcdefghi", "jklmnopqr");
printf(" [%8.8s] [%8.8s]\n", "abcdefghi", "jklmnopqr");
printf(" [%.8s] [%.8s]\n", "abcdefghi", "jklmnopqr");
}
実行結果
コード:
[ abcdef] [ ghijkl]
[abcdef ] [ghijkl ]
[ abcdef] [ ghijkl]
[abcdef] [ghijkl]
[abcdefghi] [jklmnopqr]
[abcdefghi] [jklmnopqr]
[abcdefgh] [jklmnopq]
[abcdefgh] [jklmnopq]
文字列 "abcdef" は終端の '\0' を含めずに 6バイトです。
文字列 "abcdefghi" は終端の '\0' を含めずに 9バイトです。
%8s は文字列の長さが最短で 8バイトになるように、
足りなければ左にスペースを補います。
8バイト以上の場合はスペースを補わず、
文字列をそのまま出力します。
%-8s は文字列の長さが最短で 8バイトになるように、
足りなければ右にスペースを補います。
8バイト以上の場合はスペースを補わず、
文字列をそのまま出力します。
%8.8s の .8 は、文字列が 8バイトを超える場合、
先頭の 8バイトのみを使用します。
%.8s は、最短で 0バイトになるようにしようとするので、
スペースを補いません。
"商品A" は文字コードがシフトJIS の場合、
8f a4 95 69 82 60 の 6バイトなので、
"abcdef" と同様に出力されます。
"商品A" は文字コードが UTF-8 の場合、
e5 95 86 e5 93 81 ef bc a1 の 9バイトなので、
"abcdefghi" と同様に出力されます。
Windows の文字コードは通常シフトJIS です。
Linux の文字コードは通常 UTF-8 です。
質問をするときは、フォーラムルールにあるように
コードタグを使いましょう。
実行結果もコードタグを使って、
スペースが正しく表示されるようにしましょう。
質問をするときは、フォーラムルールにあるように
使っている環境(OS やコンパイラなど)を明記しましょう。
環境によって実行結果が異なることがあるからです。