1

我试图在使用 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

4 回答 4

4

因为你没有在 中初始化sumadd_stuff_together()所以它的初始值是未指定的。您应该将其初始化为零:int sum = 0;

于 2013-07-28T12:12:54.633 回答
4

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

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

于 2013-07-28T12:13:34.193 回答
1

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

int sum = 0, repeat_times;

否则,起始值是任意的。

于 2013-07-28T12:12:45.627 回答
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。这是因为它将从内存中获取垃圾值(存储在该位置的先前值)。

于 2013-07-28T12:14:18.207 回答