C 编程 - 基于命令行参数的数组大小

标签 c arrays for-loop command-line-arguments conways-game-of-life

我正在尝试为棋盘游戏制作一个网格,我知道棋盘的最大尺寸,但是根据用户在命令行中输入的内容,它也可以更小。我编写了以下程序,它编译成功,但是当我将尺寸写入命令行时,它显示“段错误(核心转储)”。谁能告诉我我做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BOARD_WIDTH 80
#define BOARD_HEIGHT 52

int i;
int j;
int width;
int height;
int generations;
int grid[BOARD_WIDTH][BOARD_HEIGHT];

int main(int argc, char *argv[])
 {

if (argc < 2)
{
 printf("Not enough arguments entered\n");
 exit(1);
 }
else
{
 width = atoi(argv[2]);
 height = atoi(argv[3]);
 generations = atoi(argv[4]);
 }
for(i=0;i<width;i++)
for(j=0;j<height;j++)

printf("%2d", grid[i][j]);
}

最佳答案

很多事情

您在声明变量时设置了固定的 BOARD_WIDTH 和 BOARD_HEIGHT,因此如果您传递的值高于命令行上的值,它将不起作用。

但是您主要想打印什么?您尚未将 grid 初始化为任何特定内容,因此您正在打印随机内存。

首先,您必须使用“new”来初始化网格:请在此处查找 Create a 2D array with variable sized dimensions

然后,您必须将这些变量实际初始化为某些值。然后您可以将它们打印出来。

如果您向我们展示您传递给程序的内容,我们会更容易为您提供帮助。但以上所有原因只是一个开始。

此外,如果您不向程序传递 3 个参数,它也会崩溃,因为您正在使用 3 个。

尽管您正在使用 argv[2] 到 argv[4] - 您应该使用 argv[1] 到 argv[3]。因此,在当前状态下,除非您通过 4 个参数,否则它将崩溃。

关于C 编程 - 基于命令行参数的数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546140/

相关文章:

与加速度计接口(interface)时的 C 段错误

arrays - 如何在 TypeScript 中向对象数组添加具有不同值的新属性?

java - 嵌套的 For 循环给出不正确的输出

powershell - Powershell反向循环

c - C11 内存模型真的与常见的优化冲突吗?

c - 在C中返回一个 "static char[]"的字符串好不好?

c - 如果返回 NULL,则由 fgets 保证空终止

java - 填充二维数组的最后 n 个元素

java - 哪种是存储关注者和关注者最有效的数据结构

python - 使用 os.listdir 读取文件的顺序?