作为参数 1 传递的空指针
Null pointer passed as argument 1
第int d = atoi(argv[2]);
行似乎有问题。 "null pointer passed as argument 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.
}
argv[0]
包含用于启动程序的命令的名称。如果您需要两个命令行参数,请检查 argc == 3
并从 argv[1]
和 argv[2]
.
中读取命令行参数
您的程序存在多个问题
1) string
不是 C 中的标准类型。
2) false
不是 C98 中的标准常量。
标准 C(自 C99 起)提供了一种布尔类型,称为 _Bool。通过包含 header stdbool.h
可以使用更直观的名称 bool 和常量 true
和 false
.
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.
第int d = atoi(argv[2]);
行似乎有问题。 "null pointer passed as argument 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.
}
argv[0]
包含用于启动程序的命令的名称。如果您需要两个命令行参数,请检查 argc == 3
并从 argv[1]
和 argv[2]
.
您的程序存在多个问题
1) string
不是 C 中的标准类型。
2) false
不是 C98 中的标准常量。
标准 C(自 C99 起)提供了一种布尔类型,称为 _Bool。通过包含 header stdbool.h
可以使用更直观的名称 bool 和常量 true
和 false
.
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.