在执行与变量参数函数i相关的程序时
得到头文件stdarg.h并使用它做了一些简单的问题
但现在当我改变实际参数的类型时,它显示出一些奇怪的行为
这是我的代码:
#include<stdio.h>
#include<stdarg.h>
void fun(int a,...)
{
va_list k;
va_start(k,a);
int i=0;
printf("%d ",a);
while((i=va_arg(k,int)!=0)
{
printf(" %d ",i);
}
va_end(k);
}
int main()
{
fun(1,2,3,4,5,6);
printf("\n");
fflush(); //and without flush it is also showing some extra garbage value
fun(2,4,5);
printf("\n");
fflush();
fun('c','f','g','l');
return 0;
}
答案 0 :(得分:0)
如果使用整数值0表示参数列表的结尾,则还应将0传递给fun。
fun(1,2,3,4,5,6,0);
fun(2,4,5,0);
答案 1 :(得分:0)
首先,以0结束列表,因为您检查!= 0以检测结束。还有:
while((i=va_arg(k,int))!=0)
而不是
while(i=va_arg(k,int)!=0)
!=的优先级高于=
这将为您提供预期的输出:
1 2 3 4 5 6
这是完整的代码:
#include<stdio.h>
#include<stdarg.h>
void fun(int a,...)
{
va_list k;
va_start(k,a);
int i=0;
printf("%d ",a);
while((i=va_arg(k,int))!=0)
{
printf(" %d ",i);
}
va_end(k);
}
int main()
{
fun(1,2,3,4,5,6,0);
printf("\n");
//fun(2,4,5,0);
printf("\n");
//fun('c','f','g','l','\0');
getch();
return 0;
}