空指针作为参数1传递

问题描述 投票:-1回答:2

int d = atoi(argv[2]);排队似乎有些不对劲。 “空指针作为参数1传递......”

我能做什么?

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, string argv[])
{

    int num;
    int i = 1;
    int j = 1;
    int board [i][j];

   // 2nd CL argument is size of grid.

    if (argc != 2)
    {
        return false;
    }

    int d = atoi(argv[2]);

    if (d <= 0)
    {
        return false;
    }

    // setting up board.

    // number of tiles needed.
    num = d * d - 1;

    // iterating over columns and rows
    for (i = 0; i <= d; i++)
    {
        for (j = 0; j <= d; j++)
        {
            // set values.
            board[i][j] = num;
            num --;
        }
         printf ("%d", board[i][j]); // TESTING.
         printf ("\n");
    }

   // if even swap 1 & 2. Don't display 1.
}
c cs50 null-pointer
2个回答
2
投票

argv[0]保存用于启动程序的命令的名称。如果您需要两个命令行参数,请检查argc == 3并从argv[1]argv[2]读取命令行参数。


1
投票

您的程序存在多个问题

1)string不是C中的标准类型。

2)false不是C98中的标准常数。

标准C(自C99起)提供了一种名为_Bool的布尔类型。通过包含标题stdbool.h,可以使用更直观的名称bool和常量truefalse

3)你的电路板有一个固定的尺寸1x1 board[1][1]

   int i = 1;
   int j = 1;
   int board [i][j];

修复此问题,否则您的程序将粉碎内存。

4)你的董事会需要2个参数。参数从argv[1]的位置argv[2]argv[]开始因为第一个argv [0]是你需要的程序名称argc = 3。

© www.soinside.com 2019 - 2024. All rights reserved.