2010-09-29 31 views

回答

1

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 

如果它滿足你的目的,你可以從這個輸出中挑出所需的參數個數。

0

在本網站查找va_list。例如:What is ellipsis operator in c

+0

您將自己的答案鏈接到了一個封閉的問題,該封閉問題除了鏈接到我從未聽說過的博客外沒有任何內容。 – 2010-09-29 08:44:43

+1

@reemrevnivek。現在你已經聽說過它。 – aaronasterling 2010-09-29 08:46:18

+0

和?如果這篇文章很有趣,那麼這個問題的其他答案也很有趣呢? – Benoit 2010-09-29 09:50:16

1

習慣使用可變參數來傳遞描述變量參數的字符串,例如, printf(char * format_string,...);

這是一個解決方案 - 和習慣解決方案 - 解決您的問題。

傳遞描述變量參數的附加參數,然後使用該信息處理變量參數。

因此,如果您收到一個類似printf的格式字符串並且它是「%d%u」,那麼您知道您有一個int,後跟一個unsigned int。