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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
PIYO

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

#1

投稿記事 by PIYO » 16年前

こんにちは。お世話になっております。
また基本的な質問させてください。
#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で検索しても、全然関係ないものが出てきてほしい答えにたどりつけませんでした。

Korsakov

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

#2

投稿記事 by Korsakov » 16年前

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

toyo

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

#3

投稿記事 by toyo » 16年前

"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バイト
のように出力されるはずです

閉鎖

“C言語何でも質問掲示板” へ戻る