- ベストアンサー
printfについて
他サイトにて非常に興味の有るコードがあったのですが、そのサイトは訳合って見れなくなってしまったのでこちらで聞かせてください。 下記のprintfの中の、%.*sはどう解釈したら良いのですか? % . * s それぞれどういう意味が有るのですか? 始めて見るパターンなので分かりません。 #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char a[] = "あいaう"; char *p; int len; setlocale(LC_CTYPE, ""); for (p = a; *p; p += len) { len = mblen(p, MB_CUR_MAX if (len <= 0) break; printf("%d: %.*s\n", len, len, p); } return 0; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
%s(文字列)でも桁数の指定なんてできるんですね。 始めてしりました。 ご存知のようにprintfは%fで実数を表示できますが、 printf("%f",123.456); 123.456 これは桁数の指定が出来ますよね。 printf("%6.2f",123.456); /* 最大6文字、小数点以下2桁の意 */ 123.45 これの変形で*を使うとプラグラム中で動的に桁数を指定できます。 printf("%*.*f",5,1,123.456); /* printf("%5.1f",123.456)と同じ */ 123.4 これを文字列に持ちこむと、 printf("%*.*s",4,2,"abcde") __ab /* 「_」はスペースの意 */ という結果になります。 左が最大表示文字数(右詰めで表示される)で、右が表示する文字数。 これの左を省略して自動的に処理させるようにしたのが、 printf("%.*s",3,"abcde"); abc です。 printf("%d: %.*s\n", len, len, p); はそれぞれ、 d → len * → len s → p が適用されます。
その他の回答 (1)
- bikkuri
- ベストアンサー率33% (23/68)
文字列の一部分だけを出力したい時に使ってます。 printf("%.3s", "abcdef"); 決まった桁数の時 printf("%.*s", 3, "abcdef"); 桁数を変数などで指定したいとき とすると、abc だけが出力されます。 これ以外で、同様のことをさせようとすると、 一旦ワーク変数にコピーして、'\0'を後ろにつけて出力 になるので、結構手間です。
お礼
回答ありがとうございます。
お礼
大変詳しくありがとうございました。 *はポインタではなくワイルドカードだったのですね。 これですっきりしました。