sprintf的内部工作

时间:2012-06-07 11:14:22

标签: c++ c printf

我正在使用像这样的sprintf

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

之前我正在使用这个

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

现在我知道它选择了targetPrecision的值并把它放到*但是我想知道它背后发生的内部事情

2 个答案:

答案 0 :(得分:3)

如果你想知道它是如何实现的,那就没有魔力;它只是使用<stdarg.h>处理的另一个参数。非常粗略,它将类似于:

prec = -1;
⋮
if (*cp == '*') {
  prec = va_arg(ap, int);
  cp++;
}

答案 1 :(得分:0)

我不确定这是否能解答您的问题,但使用*进行字符串格式化可以控制格式化宽度。因此,在第一次调用中,格式宽度由targetPrecision的值确定。

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

至于sprintf的实际内部。你可以参考@Marcelo Cantos的答案。

检查此link是否有格式参数。