学习C时,我发现printf
在传递时会收到很多参数。C:写一个函数不知道有多少个参数
我不知道C如何实现这样的功能,用户可以根据用户需要键入尽可能多的参数。我也曾经想过关于指针,但仍然没有明智的想法。如果有人对这种功能有任何想法,请告诉我。
学习C时,我发现printf
在传递时会收到很多参数。C:写一个函数不知道有多少个参数
我不知道C如何实现这样的功能,用户可以根据用户需要键入尽可能多的参数。我也曾经想过关于指针,但仍然没有明智的想法。如果有人对这种功能有任何想法,请告诉我。
您需要使用va_args,va_list的等。 看看这个教程。 http://www.cprogramming.com/tutorial/c/lesson17.html
这应该是有帮助的。
您必须在函数声明中使用...
表示法作为最后一个参数。
请参阅本教程学习更多:http://www.cprogramming.com/tutorial/c/lesson17.html
这是正确的答案。只需要注意关于缺少可变参数类型检查的警告。 –
您使用C varargs
编写可变参数函数。您需要包含stdargs.h
,它使用宏可以遍历未知大小的参数列表:va_start
,va_arg
和va_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解决了这个问题。 [通过可变数量的参数]的
#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));
}
可能重复(http://stackoverflow.com/questions/3836272/passing-variable-number-of-arguments) –