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.

在第二次调用中,格式宽度固定为 6 位。

至于sprintf. 您可以参考@Marcelo Cantos 的回答。

检查此link格式参数。

于 2012-06-07T11:30:46.417 回答