在C中初始化2d数组

时间:2019-10-29 05:09:32

标签: c arrays segmentation-fault verbose

我是C语言的新手,我正在尝试制作一个包含2种不同情况的2d数组。

第一个是详细模式,输入了2个参数,第二个是数组的大小。

2nd是第一个参数是数组的大小。

问题在于,每当我选择第二个选项时,我都会不断收到“细分错误:11”。但是,如果另一个不在代码中,则这两个选项可以单独工作。在一起,只有第一个选项可以给我正确的结果

int main(int argc, char *argv[])
{
    /*
    char n1;
    sscanf (argv[1],"%c",&n1);
    */
    int status, status2, n, n2;

    status = sscanf(argv[1], "%d", &n);
    status2 = sscanf(argv[2], "%d", &n2);
    if (strncmp(argv[1], "-v", 2) == 0) // if we are in VERBOSE MODE
    {
        int B[n2 + 1][n2 + 1]; // the verbose array
        for (int i = 0; i < n2 + 1; i++) // making every element into 0's
        {
            for (int j = 0; j < n2 + 1; j++)
            {
                B[i][j] = 0;
            }
        }
        printf("we are in verbose mode\n");
        printf("argument 1 is %s\n", argv[1]);
        printf("argument 2 is %s\n", argv[2]);
        printf("2,2 is %d\n", B[2][2]); // testing
    }
    else if (status == 1)       // if an int is entered -> NOT VERBOSE MODE
    {
        printf("integer is %d\n", n);
        int B[n + 1][n + 1]; // declaring the array
        for (int i = 0; i < n + 1; i++) // to make every element 0
        {
            for (int j = 0; j < n + 1; j++)
            {
                B[i][j] = 0;
            }
        }
        printf("1,1 is %d\n", B[1][1]); // testing
    }
    else    // if it's a wrong input -> print usage message
    {
        printf("Usage message\n");
    }
    return EXIT_SUCCESS;
}

这是else if语句代码给我分段错误,但是我不明白为什么。如果删除第一个“ if”语句中的“ for”循环,则可以使用,但在两种情况下都需要该数组。 (n + 1是大小,因为我希望行/列号与数组的行/列号相匹配。)

0 个答案:

没有答案