我一直在試圖傳遞變量參數傳遞給其他函數C,但它產生不一致的結果,在不同的運行環境,以及在同一環境中不同的運行:傳遞va_list的其它功能
int main()
{
int result = myprintf("Something \n %d", 9);
return result;
}
int myprintf(const char *format, ...){
printf("Something \n %d", 9);
printf("\n");
va_list args;
va_start(args, format);
int result = printf(format,args);
printf("\n");
va_end(args);
return result;
}
而產生的結果是:
WWW.FIRMCODES.COM
9
WWW.FIRMCODES.COM
438656664
我找不到「438656664」的原因。
你不能那樣做;你只能將'args'傳遞給以'va_args'爲參數的函數。它們的名字中有一個'v':'vprintf','vfprintf','vsnprintf'。 –
如果我需要通過printf()函數創建一個包裝,那麼我該如何繼續?我在想,我可以創建一個函數,在對格式字符串進行某些操作後,我會調用printf()。但正如你所建議的,我應該稱之爲「V」功能家族,對吧? – Monk
是的,將'va_list'轉換爲''v'系列函數是一種可行的方法。不過,你可能不應該操縱格式字符串,至少不是格式說明符本身。 (你可以得到很多編譯器來檢查格式字符串和參數是否同意; gcc/clang通過屬性來做到這一點,VC++通過SAL註釋來做到這一點。如果你篡改格式字符串,這樣的檢查將毫無意義。) –