冲刺的内部工作

Internal working of sprintf

本文关键字:工作 内部 冲刺      更新时间:2023-10-16

我像这样使用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康托斯的回答。

检查此link以了解格式参数。