我试图读取命令行参数并将它们存储到整数数组中。当我编译代码时,我没有得到任何错误。当我运行代码时,我得到了 - 分段故障核心被转储。可能是什么问题?
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int N = argc;
int i = 0;
int a[N];
printf("\n Number of arguments: %d", argc);
if(argc>1){
for(i = 0;i<argc;i++){
a[i] = atoi(argv[i+1]); //read variables from command line to a[i]
}
}
else {
printf("\n Insufficient Arguments.... Exit()");
exit(1);
}
printf("\n The values stored in the array are: ");
for(i = 0;i<argc-1;i++){
printf("\n %d",a[i]); //print values
}
return 0;
}
答案 0 :(得分:2)
问题是你在这里argv
结束了。
for(i = 0; i < argc; i++){
a[i] = atoi(argv[i+1]);
}
如果我运行./test 2 3 4 5
,则argc
为5,argv
从0变为4.您的for
循环从0变为4,但是您看argv[i+1]
1}}这是1到5。
让for
循环迭代在一个数组或另一个数组上会更好。在这种情况下,可以更容易地将其视为从{1}开始从1开始迭代,使用argv
作为边界,并使用argc
作为{{1的索引}}
i
答案 1 :(得分:-1)
据我所知,数组需要在编译时具有精确值。
使用new
关键字有一种解决方法。
以下代码无法在Visual C ++ Express 2010上编译。
int N = argc;
int a[N];
请注意,相同的编译器不会创建大小为零的数组,因此应该是您的问题所在。