2012-07-02 33 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)); 
} 
相关问题