0

私はこのようなsprintfを使用しています

sprintf(cTmpBuf, "%0*lu",targetPrecision,ulFraction);

この前に私はこのように使用していました

sprintf(cTmpBuf, "%06lu", ulFraction); 

targetPrecisionの値を選択して*に設定したことがわかったので、その背後で内部的なことが起こっていることを知りたい

4

2 に答える 2

3

それがどのように実装されているかを知りたければ、魔法はありません。を使用して処理される単なる別の引数です<stdarg.h>。非常に大まかに言うと、次のようになります。

prec = -1;
⋮
if (*cp == '*') {
  prec = va_arg(ap, int);
  cp++;
}
于 2012-06-07T11:19:02.270 に答える
0

これがあなたの質問に答えるかどうかはわかりませんが、文字列の書式設定では、を使用し*て書式設定の幅を制御できます。したがって、最初の呼び出しでは、フォーマット幅はの値によって決定されますtargetPrecision

2番目の呼び出しでは、フォーマット幅は6桁に固定されています。

の実際の内部についてはsprintf。@MarceloCantosの回答を参照できます。

linkパラメータのフォーマットについては、これを確認してください。

于 2012-06-07T11:30:46.417 に答える