变量参数函数

时间:2011-03-04 13:06:20

标签: variables arguments

在执行与变量参数函数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;
}

2 个答案:

答案 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;
    }