web-dev-qa-db-ja.com

sprintfによるパディング

ダミーの質問があります。整数を0でバッファパディングに出力したいのですが、sprintfformatで整理できません。私は次を試みています

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );

次の文字列が欲しい

"000000000000000000000000000324"

私は何を間違えていますか? 30文字の最大幅のために0でパッドすることを意味しませんか?

"%030d"はあなたが探しているドロイドです

66
Seth Robertson

構文が少し間違っています。次のコードは、目的の出力を生成します。

char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );

Printfに関するウィキペディアの記事

[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
7
Sreerac

パディングと幅はbefore型指定子になります:

sprintf( buf, "%030d", my_val );
7
Nick Meyer

試してください:

sprintf( buf, "%030d", my_val );
5
Matthew

精度と幅のパラメーターは、「%」と変換指定子「d」の間ではなく、後にする必要があります。実際、すべてのフラグはそうです。したがって、正数に先行する「+」が必要な場合は、「%+ d」を使用します。

3
jbruni

%030d、最後にタイプ文字があります。

1
John