5

私が作業している間、コード内のどこかで次のステートメントを見ました。のフォーマット指定子に混乱していますsprintf

   d_number = strtol( tmp_buf , (char **)NULL, 16);
   memset( tmp_buf , ' ' , sizeof( tmp_buf ) );
   sprintf( tmp_buf , "%0.*d" , (int)sizeof( dec_number ) , d_number  );

誰か説明してくれませんか?

4

2 に答える 2

6

.*は、精度がフォーマット文字列で指定されていないことを意味しますが、フォーマットする必要がある引数の前に追加の整数値引数として指定されています。(d_番号)

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

于 2010-02-08T11:22:09.597 に答える
0

* は (int)sizeof(dec_number) に置き換えられます。dec_number が int の場合、多くのマシンでは %0.4d と同じです。これは、整数を出力する際の精度または出力する最大桁数です。

* は、"." のどちらの側にも表示できます。次に例を示します。

sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number);

も機能します。

于 2010-02-08T11:23:53.680 に答える