非常简单,我试图在命令行中对所有输入的整数求和。实际上总和是有效的,如果我用" 1 1 1 1"输入,总和增加四倍。问题是总和被初始化为一些非常大的数字(4293283588)。那是为什么?
int main(int argc, char*argv[])
{
int a = 0;
int sum = 0;
size_t i = 0;
for (i=0; i<argc; i++)
{
a = atoi(argv[i]);
sum = sum + a;
printf("%ld\n", sum);
}
return 0;
}
答案 0 :(得分:4)
argv[0]
可能是可执行文件的名称。从标准:
5.1.2.2.1程序启动
...
如果
argc
的值大于零,则argv[0]
指向的字符串 表示程序名称;argv[0][0]
如果是,则为空字符 程序名称不能从主机环境中获得。如果argc
的值为 大于一,argv[1]
指向的字符串argv[argc-1]
代表程序参数。
尝试
for (i=1; i<argc; i++)
此外,正如 @BLUEPIXY 所示,%ld
假定类型为long
。因此,要么将其更改为%d
,要么使用long sum
。