奇怪的输出与C中的varargs

时间:2014-04-24 08:58:16

标签: c variadic-functions

#include <stdio.h>
#include <stdarg.h>
void f(int parameter, ...)
{
    va_list ap; 
    int j;
    va_start(ap, parameter); 
    for (j = parameter; j >= 0; j = va_arg(ap, int))
        printf("%d ", j); 
    va_end(ap);
    printf("\n");
}

int main()
{
    f(1, 2, 3, 4); 
    f(1, 2);
    f(1);
}

我写这段代码,但输出很奇怪。谁能告诉我原因。 输出:

esekilvxen245 [10:54am] [/home/elqstux/useful] -> ./a.out
1 2 3 4 1748292352 1748370624 
1 2 1748295184 1745597392 
1 10 1748295184 1745597392

1 个答案:

答案 0 :(得分:2)

循环的结束条件是j小于零,但您不能在调用中以负数结束参数列表。这意味着循环将继续,直到找到负数,该数字可以是堆栈中的任何位置,远远超出您传递的参数。

称之为例如。

f(1, 2, 3, 4, -1);