0

非常简单,我试图对命令行中输入的所有整数求和。总和实际上有效,如果我以“ 1 1 1 1 ”输入启动程序,总和将增加四倍。问题是 sum 被初始化为一个非常大的数字(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;
}
4

1 回答 1

4

argv[0]可能是可执行文件的名称。从标准:

5.1.2.2.1 程序启动

……

如果 的值argc大于零,则 指向的字符串argv[0] 代表程序名argv[0][0]如果主机环境中没有程序名,则应为空字符。如果 的值argc大于 1,则through指向的字符串 表示程序参数argv[1]
argv[argc-1]

尝试

for (i=1; i<argc; i++)

此外,正如@BLUEPIXY 所指出的,%ld假定 type long。因此,要么将其更改为%d,要么使用long sum.

于 2014-09-29T00:31:33.173 回答