Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于用户输入在C中创建二维数组_C_Arrays_Dynamic_2d - Fatal编程技术网

基于用户输入在C中创建二维数组

基于用户输入在C中创建二维数组,c,arrays,dynamic,2d,C,Arrays,Dynamic,2d,我正在尝试为一个依赖于用户输入的游戏创建一个动态2D数组。我目前有一个分配内存的函数,如下所示: void mallocGrid(int argc, char** argv) { int i; char* height; char* width; int inputHeight = strtol(argv[3], &height, 10); int inputWidth = strtol(argv[4], &width, 10);

我正在尝试为一个依赖于用户输入的游戏创建一个动态2D数组。我目前有一个分配内存的函数,如下所示:

void mallocGrid(int argc, char** argv) {
    int i; 
    char* height;
    char* width;

    int inputHeight = strtol(argv[3], &height, 10);
    int inputWidth = strtol(argv[4], &width, 10);

    char** gridArray = malloc(sizeof(char*) * inputHeight);
    for (i = 0; i < inputHeight; i++){
        gridArray[i] = malloc(sizeof(char) * inputWidth);
    }
}
但我希望得到:

..
..
..

这是动态创建网格的正确方法吗?随着游戏的进行,网格可以被覆盖?

二维动态数组和它的输出之间没有关系。您希望以什么方式获得输出取决于您。从printf中删除\n(“%c\n”,gridArray[i][j]);语句,您将获得预期的输出。

[注释太长]

这里介绍了
gridArray
的两个定义

void mallocGrid(int argc, char** argv) {
  ...

  char** gridArray = malloc(sizeof(char*) * inputHeight);
这里呢

void gridInit(int argc, char** argv) {
  char gridArray[MAX_COLUMN][MAX_ROW];

  ...
他们是独立的。每个定义了自己的变量。这两个人除了名字以外没有任何共同之处。甚至类型也不同

函数离开时,两个变量的定义都“消失”


我正在尝试为一个依赖于用户输入的游戏创建一个动态2D数组

您不能在此处执行此操作:

  char gridArray[MAX_COLUMN][MAX_ROW];

您的输出与动态分配此数组的方式无关,仅取决于传递给函数
printf
的内容。通过在第一次调用
printf
char**
时删除
\n
可以获得所需的输出
char**
不是二维数组,也不能指向一个数组或用作一个数组!并使用自解释的名称作为参数
argc
argv
完全是无用的,它们是误码。嗯,
malloc
ed对象不会消失。它们会泄漏,因为代码无法再访问它们。
void gridInit(int argc, char** argv) {
  char gridArray[MAX_COLUMN][MAX_ROW];

  ...
  char gridArray[MAX_COLUMN][MAX_ROW];