C中的变量参数列表不起作用

时间:2013-07-28 12:10:21

标签: c variadic-functions

我曾尝试在使用stdarg.h的C中运行以下代码,但由于某些原因我无法使其工作。我没有使用变量参数列表的经验,所以有人请帮忙!

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int add_stuff_together(int numb_count, ...);

int main()
{
    int x = add_stuff_together(2, 1, 1);

    printf("%i", x);

    return 0;
}

int add_stuff_together(int numb_count, ...)
{
    int sum, repeat_times;
    va_list args;
    va_start(args, numb_count);

    for (repeat_times = 0; repeat_times < numb_count; repeat_times++)
    {
        sum = sum +  va_arg(args, int);
    }
    return sum;
}

我得到的输出是: 172998379

有人可以解释为什么我会得到这个答案吗?

4 个答案:

答案 0 :(得分:4)

因为您未在sum中初始化add_stuff_together(),所以其初始值未指定。您应该将其初始化为零:int sum = 0;

答案 1 :(得分:4)

您的sum变量未初始化,因此其值可以默认为任何值。

另请注意,您不使用va_end()宏,您应该这样做。

答案 2 :(得分:1)

在开始向其添加数字之前,您应该将sum初始化为零:

int sum = 0, repeat_times;

否则,起始值是任意的。

答案 3 :(得分:1)

试试这个

int add_stuff_together(int numb_count, ...)
{
    int sum = 0;           //initializing sum to 0.
    int repeat_times;
    va_list args;
    va_start(args, numb_count);

    for (repeat_times = 0; repeat_times < numb_count; repeat_times++)
    {
        sum = sum +  va_arg(args, int);
    }
    return sum;
}

在没有初始化的情况下使用sum将导致奇怪的输出,这就是您获得输出172998379的原因。这是因为它将从内存中获取垃圾值(存储在该位置的先前值)。