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