我正在像这样使用 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
.
在第二次调用中,格式宽度固定为 6 位。
至于sprintf
. 您可以参考@Marcelo Cantos 的回答。
检查此link
格式参数。