如何将命令行参数的所有元素相加

  • 本文关键字:元素 命令行 参数 c
  • 更新时间 :
  • 英文 :


这是我的代码

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int a;
for(int i=1;i<=argc;i++){
a+=atoi(argv[i]);
}
printf ("%d",a);
}

我不断遇到分段错误,但我正在尝试将命令行的所有元素相加,例如/a.out 5 6 7将给出18作为输出,欢呼。

(崩溃)的问题在于循环本身:

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

argc自变量是传递给程序的自变量的数目;程序名称";在CCD_ 2处。所以实际参数的有效索引是argv[1]argv[argc - 1]

此外,argv数组由一个空指针终止,该指针将位于argv[argc]

由于您在循环中包含argv[argc],因此您将向atoi传递一个空指针,这将导致未定义的行为并可能导致崩溃。

简单的解决方案是使用小于<而不是小于或等于作为循环条件:

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

您从未将a初始化为0。另外,使用strtol()函数。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int a = 0;
for (int i = 1; i < argc; i++) {
a += strtol(argv[i], NULL, 10);
}
printf("%dn", a);
return EXIT_SUCCESS;
}

最新更新