我曾尝试在使用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
有人可以解释为什么我会得到这个答案吗?
答案 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
的原因。这是因为它将从内存中获取垃圾值(存储在该位置的先前值)。