私はこのようなsprintfを使用しています
sprintf(cTmpBuf, "%0*lu",targetPrecision,ulFraction);
この前に私はこのように使用していました
sprintf(cTmpBuf, "%06lu", ulFraction);
targetPrecisionの値を選択して*に設定したことがわかったので、その背後で内部的なことが起こっていることを知りたい
それがどのように実装されているかを知りたければ、魔法はありません。を使用して処理される単なる別の引数です<stdarg.h>
。非常に大まかに言うと、次のようになります。
prec = -1;
⋮
if (*cp == '*') {
prec = va_arg(ap, int);
cp++;
}
これがあなたの質問に答えるかどうかはわかりませんが、文字列の書式設定では、を使用し*
て書式設定の幅を制御できます。したがって、最初の呼び出しでは、フォーマット幅はの値によって決定されますtargetPrecision
。
2番目の呼び出しでは、フォーマット幅は6桁に固定されています。
の実際の内部についてはsprintf
。@MarceloCantosの回答を参照できます。
link
パラメータのフォーマットについては、これを確認してください。