我正在使用像这样的sprintf
sprintf(cTmpBuf, "%0*lu",targetPrecision,ulFraction);
之前我正在使用这个
sprintf(cTmpBuf, "%06lu", ulFraction);
现在我知道它选择了targetPrecision的值并把它放到*但是我想知道它背后发生的内部事情
答案 0 :(得分:3)
如果你想知道它是如何实现的,那就没有魔力;它只是使用<stdarg.h>
处理的另一个参数。非常粗略,它将类似于:
prec = -1;
⋮
if (*cp == '*') {
prec = va_arg(ap, int);
cp++;
}
答案 1 :(得分:0)
我不确定这是否能解答您的问题,但使用*
进行字符串格式化可以控制格式化宽度。因此,在第一次调用中,格式宽度由targetPrecision
的值确定。
在第二次调用中,格式宽度固定为6位数。
至于sprintf
的实际内部。你可以参考@Marcelo Cantos的答案。
检查此link
是否有格式参数。