尝试在整数数组中复制命令行参数时出现分段错误

时间:2016-11-17 21:36:59

标签: c

我试图读取命令行参数并将它们存储到整数数组中。当我编译代码时,我没有得到任何错误。当我运行代码时,我得到了 - 分段故障核心被转储。可能是什么问题?

#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;
}

2 个答案:

答案 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];

请注意,相同的编译器不会创建大小为零的数组,因此应该是您的问题所在。