2012-07-02 49 views
4

學習C時,我發現printf在傳遞時會收到很多參數。C:寫一個函數不知道有多少個參數

我不知道C如何實現這樣的功能,用戶可以根據用戶需要鍵入儘可能多的參數。我也曾經想過關於指針,但仍然沒有明智的想法。如果有人對這種功能有任何想法,請告訴我。

+0

可能重複(http://stackoverflow.com/questions/3836272/passing-variable-number-of-arguments) –

回答

3

您使用C varargs編寫可變參數函數。您需要包含stdargs.h,它使用宏可以遍歷未知大小的參數列表:va_startva_argva_end,使用數據類型:va_list

這裏的大多無用功能,打印出它的長度可變的參數列表:

void printArgs(const char *arg1, ...) 
{ 
    va_list args; 
    char *str; 

    if (arg1) We 

     va_start(args, arg1); 

     printf("%s ", arg1); 

     while ((str = va_arg(argp, char *)) != NULL) 
      printf("%s ", str); 

     va_end(args); 
    } 
} 

... 

printArgs("print", "any", "number", "of", "arguments"); 

Here's演示,你可以在參數列表中不止一次重複一個更有趣的例子。

請注意,使用此功能存在類型安全問題; wiki article解決了這個問題。 [通過可變數量的參數]的

3
#include <stdarg.h> 
#include <stdio.h> 

int add_all(int num,...) 
{ 
    va_list args; 
    int sum = 0; 
    va_start(args,num); 
    int x = 0; 
    for(x = 0; x < num;x++) 
     sum += va_arg(args,int); 
    va_end(args); 
    return sum; 
} 

int main() 
{ 
    printf("Added 2 + 5 + 3: %d\n",add_all(3,2,5,3)); 
} 
相關問題