问题描述
我正在学习C,并且创建了一个简单的addNumbers(int num,...)
函数,该函数接受任意数量的int参数,并返回它们的总和。
这个问题是当我得到addNumbers(4,2)
的输出时,输出为14823901
。显然是不正确的。
当我调用函数addNumbers(4,2,4,7,10)
时,它输出23
,这也是不正确的,因为它应该是27
,但至少离它更近了。
这是我的代码:
#include<stdio.h>
#include<stdarg.h>
// Functions with variable number of arguments
int addNumbers(int num,...)
{
int i;
int sum = 0;
// List to hold variable amount of parameters
va_list parameters;
// Initialize "parameters" list with arguments
va_start(parameters,num);
for(i = 0; i < num; i++)
{
// Adds each "int" argument from "parameters" to sum
sum += va_arg(parameters,int);
}
// Cleans memory
va_end(parameters);
return sum;
}
int main()
{
printf("%i",addNumbers(4,10));
return 0;
}
我应该不使用va_list
,va_arg
等吗?
解决方法
对于addNumber(4,2),您正在使用第一个参数作为计数器,其中有4个参数要累加,但您只给出1,因此for循环继续从内存中读取期望更多的参数,并选择随机值和加起来。