【问题标题】:Summing the command line对命令行求和
【发布时间】:2014-11-23 07:41:33
【问题描述】:

非常简单,我正在尝试对命令行中输入的所有整数求和。总和实际上有效,如果我以“ 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;
}

【问题讨论】:

  • 能看到notAtoi的函数定义吗?
  • 我的错,功能和atoi一样
  • i=0 --> i=1 int sum = 0; --> long sum = 0;
  • 嘿Broaj,请不要在没有很好的理由的情况下删除您的问题,例如this one。如果再次发生这种行为,您可能会被禁止访问该网站。

标签: c command-line atoi argc


【解决方案1】:

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。

【讨论】:

  • 这是正确的。 argv 是用于启动可执行文件的完整命令,除了用空格进行标记外,未处理。
  • 啊,好吧。我不知道 argv[0] 是什么。我现在明白了。
  • @Woodrow 不,它实际上是定义的实现。 — argv[argc] shall be a null pointer. — If the value of argc is greater than zero, the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program startup. The intent is to supply to the program information determined prior to program startup
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 2015-04-11
  • 2011-03-06
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多