main中的命令行参数

时间:2015-02-01 15:45:20

标签: c

我编写了一个代码,用于汇总从命令行引入的整数:

#include <stdio.h>

int main(int argc, int* argv[]) {
  int i, s=0;

  for (i=1;i<argc;i++) 
  s=s + *argv[i];

  printf("Sum: %d\n", s);

return 0;
}

最好的部分是,它通过了gcc编译过程,但是当我实际运行它并插入数字时,结果似乎我以某种方式突破了int的范围。

3 个答案:

答案 0 :(得分:2)

您似乎正在以C89模式编译代码,其中s默认为编译器ints未初始化,因此无法预料到任何好处。如果它将调用未定义的行为

请注意,argv[i]属于char *类型(更改您的main签名),您需要先将其转换为int,然后再将其添加到s

答案 1 :(得分:0)

假设您已正确初始化s,如下所示。 除此之外,main()的原型应如下所示,以获取命令行参数。

int main(int argc, char **argv)
{
  int s =0;
  // Check for argc matches the required number of arguments */
  for(i=1;i<argc;i++)
  s=s + atoi(argv[i]); /* Use atoi() to convert your string to integer strtol() can also be used */

  printf("%d\n",s);
  return 0;
}

PS:使用未初始化的变量导致未定义的behvaior

答案 2 :(得分:0)

main的2 nd 参数应该是char**类型或char*[]类型而不是int*[]。因此,*argv[i]的类型为char。您可以获取每个字符串argv[i],而不是获取每个字符,然后从中提取数字并将其分配给变量,例如char*。这可以通过使用num函数来完成:

sscanf