e307.c

printfの%の使い方が間違っていませんか? sprintf
/*###19 [cc] 警告: A:e307:  printfの%の使い方が間違っていませんか? %%%*/

/* 修正前 */
sprintf(buf, "%s/%s/%s/%s/%4$s%09s¥n",
		"PATH", /*1*/
		"DIR",  /*2*/	
		"lang", /*3*/	
		"cmd",  /*4*/	
		"dict"  /*5*/	
			/*6引数が1個足りない*/
) ;

/* 修正例 */ sprintf(buf, "%s/%s/%s/%s/%s%s¥n", "PATH", /*1*/ "DIR", /*2*/ "lang", /*3*/ "cmd", /*4*/ "cmd", /*5*引数が一個増えてる事に注意*/ "dict" /*6*/ ) ;

解説 %4$s は 高級テクニックすぎます。 処理系によってはサポートされていないこともあります。 %09s は 文字列なのに、ZEROでパディングしてよいですか? と、警告しています。 参考: 『プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「付録B1.2 書式付き出力」Page305