ページ 11

printfの出力形式について教えてください。

Posted: 2009年7月01日(水) 00:54
by PIYO
こんにちは。お世話になっております。
また基本的な質問させてください。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){
	// 文字列を配列に入れる
	char src[128] = "一二三ABCいろは";
	char *p = src;
	int len;
	
	// ロケートを日本にする
	setlocale(LC_ALL, "jpn");
	// マルチバイトの文字列分("一二三ABCいろは")ループ
	while ((len=mblen(p, MB_CUR_MAX)) > 0) {
		printf("%-2.*s : %dバイト\n", len, p, len);
		p += len;	// 文字のバイト分ずらす
	}
	return 0;
}
サンプルの抜粋ですが、
printf("%-2.*s : %dバイト\n", len, p, len);
の部分の意味を教えてください。

printf("%s : %dバイト\n", p, len);
とした場合はわかるのですが、
■■■■■■■■■■■■■■■
一二三ABCいろは : 2バイト
二三ABCいろは : 2バイト
三ABCいろは : 2バイト
ABCいろは : 1バイト
BCいろは : 1バイト
Cいろは : 1バイト
いろは : 2バイト
ろは : 2バイト
は : 2バイト
■■■■■■■■■■■■■■■
と出力されるので、%-2.*の部分の意味を知りたいのですが、
%-2.*とgoogleで検索しても、全然関係ないものが出てきてほしい答えにたどりつけませんでした。

Re:printfの出力形式について教えてください。

Posted: 2009年7月01日(水) 03:24
by Korsakov
http://c-production.com/contents/c/sec03.html#08
printf("%-2.*s : %dバイト\n", len, p, len);
lenの値により、出力される文字数を制限できるようです。

Re:printfの出力形式について教えてください。

Posted: 2009年7月01日(水) 06:45
by toyo
"printf"で検索したらいいですよ
http://www.linux.or.jp/JM/html/LDP_man- ... ntf.3.html
-は左詰で出力
2は最小フィールド幅
.は精度で文字列の場合は出力文字数を指定できます(.2で2バイト出力)
.*とすることで数を引数で指定できます(質問の場合は len の値が指定されます)
printf("%-2.*s : %dバイト\n", len, p, len);
は文字列 p を左詰で最小2バイト表示
出力文字数はlenバイトなので
一 : 2バイト
のように出力されるはずです