的內部工作我使用的sprintf這樣的sprintf
sprintf(cTmpBuf, "%0*lu",targetPrecision,ulFraction);
此之前
我使用這樣
sprintf(cTmpBuf, "%06lu", ulFraction);
現在我知道它挑targetPrecision的價值,並把它放到*,但我想要知道它背後發生的內部事情
的內部工作我使用的sprintf這樣的sprintf
sprintf(cTmpBuf, "%0*lu",targetPrecision,ulFraction);
此之前
我使用這樣
sprintf(cTmpBuf, "%06lu", ulFraction);
現在我知道它挑targetPrecision的價值,並把它放到*,但我想要知道它背後發生的內部事情
如果你想知道它是如何實現的,那就沒有魔法;這只是使用<stdarg.h>
處理的另一個參數。大致來說,這將是這樣的:
prec = -1;
⋮
if (*cp == '*') {
prec = va_arg(ap, int);
cp++;
}
ap採取了我通過的價值,然後應用它? –
它是我所展示的。在看到'*'後,函數決定將下一個參數解釋爲用於指定精度的整數。這可能有助於理解常規參數的處理方式完全相同。例如,如果函數看到'%g',它將執行類似'double d = va_arg(ap,double);/* ...格式化雙... * /'。 –
我不知道這是否回答你的問題,但在使用字符串格式化*
讓你控制格式寬度。所以在第一次調用時,格式化寬度由targetPrecision
的值確定。
在第二次調用中,格式化寬度固定爲6位數。
至於sprintf
的實際內部。你可以參考@Marcelo Cantos的回答。
檢查此link
的格式參數。
你想知道它是如何實現的嗎? –
除非我的眼睛在欺騙我,否則兩個電話看起來都一樣?!!! –
是@marcelo cantos –