C 变分函数中的冲突类型
在为一个项目工作了很长一段时间后,我又在和C一起工作,我试图了解可变函数。基本上,我希望能够将大量字符串传递给函数C 变分函数中的冲突类型,c,variadic-functions,C,Variadic Functions,在为一个项目工作了很长一段时间后,我又在和C一起工作,我试图了解可变函数。基本上,我希望能够将大量字符串传递给函数 #include<stdarg.h> int main(int argc, const char * argv[]) { test_function(2,"test","test2"); test_function(4,"test3","test4","test5","test6"); return 0; } void test_fun
#include<stdarg.h>
int main(int argc, const char * argv[])
{
test_function(2,"test","test2");
test_function(4,"test3","test4","test5","test6");
return 0;
}
void test_function(int args, ...)
{
va_list ap;
va_start(ap, args);
int i;
for(i=0;i<args;i++)
{
printf("Argument:%s\n",va_arg(ap, char*));
}
va_end(ap);
}
#包括
int main(int argc,const char*argv[]
{
测试功能(2,“测试”、“测试2”);
test_函数(4,“test3”、“test4”、“test5”、“test6”);
返回0;
}
无效测试函数(int参数,…)
{
va_列表ap;
va_启动(ap、args);
int i;
对于(i=0;i请在使用函数之前声明test\u
。由于您使用的是printf
,因此还需要包含stdio.h
#include <stdarg.h>
#include <stdio.h>
void test_function(int args, ...);
int main(int argc, char * argv[])
{
#包括
#包括
无效测试_函数(int args,…);
int main(int argc,char*argv[])
{
要么为函数添加一个原型,要么在main()之前定义它。
我忘了为函数添加一个原型,傻我!刚刚添加
void test_function (int args, ...);
正如其他人所说,为测试函数
放置一个原型,也请注意
printf("Argument:%s\n",va_arg(ap, int));
将字符串传递到此函数(不是int
s),而是使用:
printf("Argument:%s\n",va_arg(ap, char *));
您没有test\u函数的原型
,编译器在main()
中发现时隐式声明它为int test\u函数()
。然后它遇到void test\u函数(int,…)
。它们不一样。刚刚发现了!谢谢哇!你为什么只使用va\u arg(ap,int)呢
而不是va_arg(ap,char*)
?这是代码中的一个错误,因为我相信它是在调试阶段更改的。谢谢于浩。我的源代码中有这一点。6年后回到C将是一个挑战。我已经太习惯了其他高级语言及其舒适性。这是对的。但是,正如其他人告诉你的,你的anser没有添加任何内容值。反过来,您可以接受✓ 另一个答案。我在一段时间内无法接受答案。我一定是在那之后忘记了。嗯,那可能发生:-)