我有一個函數如何在C中打印可變參數的值?
void func(int x, char *str, ...)
{
...
}
我調用它,如下所示:
func(1, "1", "2", "3");
我如何打印的所有額外的參數(2,3)在功能上的價值?
我有一個函數如何在C中打印可變參數的值?
void func(int x, char *str, ...)
{
...
}
我調用它,如下所示:
func(1, "1", "2", "3");
我如何打印的所有額外的參數(2,3)在功能上的價值?
從STDARG
手冊頁有關使用va_arg
獲得下一個論點:
如果沒有一個參數,或者 如果類型是不符合 類型的兼容實際下一個參數(如 根據默認的 參數促銷推廣),將發生隨機錯誤 。
因此,除非你想隨機錯誤蔓延,你應該事先知道參數的數量。
即便如此,如果你想扔謹慎的風,你可以嘗試:
void func(int x,char *str, ...)
{
va_list al;
va_start(al,str);
while(x>0)
{
str=va_arg(al,char *);
--x;
}
while(str != NULL)
{
printf("%s ",str);
str=va_arg(al,char *);
}
va_end(al);
}
有了,
func(1,"1","2","3");
我得到的輸出,
2 3 U��WVS�O
如果它滿足你的目的,你可以從這個輸出中挑出所需的參數個數。
在本網站查找va_list。例如:What is ellipsis operator in c
習慣使用可變參數來傳遞描述變量參數的字符串,例如, printf(char * format_string,...);
這是一個解決方案 - 和習慣解決方案 - 解決您的問題。
傳遞描述變量參數的附加參數,然後使用該信息處理變量參數。
因此,如果您收到一個類似printf的格式字符串並且它是「%d%u」,那麼您知道您有一個int,後跟一個unsigned int。
您將自己的答案鏈接到了一個封閉的問題,該封閉問題除了鏈接到我從未聽說過的博客外沒有任何內容。 – 2010-09-29 08:44:43
@reemrevnivek。現在你已經聽說過它。 – aaronasterling 2010-09-29 08:46:18
和?如果這篇文章很有趣,那麼這個問題的其他答案也很有趣呢? – Benoit 2010-09-29 09:50:16