【问题标题】:Creating a 2D array in C based on user input基于用户输入在 C 中创建二维数组
【发布时间】:2016-12-20 22:18:51
【问题描述】:

我正在尝试为依赖于用户输入的游戏创建动态二维数组。我目前有一个分配内存的函数:

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);
    }
}

我有另一个函数可以用“。”填充这个网格数组。特点。这是我目前拥有的:

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

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

    for(i=0; i < inputWidth; i++) {
        for(j=0; j < inputHeight; j++) {
            gridArray[i][j]= '.';
            printf("%c\n", gridArray[i][j]);
        }
        fputc('\n', stdout); 
    }
}

但是,当用户输入高度为 2 和宽度为 3 时,会显示以下内容:

.
.

.
.

.
.

但我期待得到:

..
..
..

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

【问题讨论】:

  • 您的输出与您如何动态分配此数组无关,仅取决于您传递给函数printf 的内容。您可以通过在第一次调用printf 时删除\n 来获得所需的输出。
  • char ** 不是二维数组,也不能指向一个或用作一个!并为参数使用不言自明的名称。 argcargv 不仅没用,还具有误导性。

标签: c arrays dynamic 2d


【解决方案1】:

二维动态数组和它的输出没有关系..你想以什么方式得到你的输出取决于你..从 printf("%c\n", gridArray[i][ 中删除 \n j]);声明,你会得到你所期望的输出。

【讨论】:

    【解决方案2】:

    [评论太长]

    这里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];
    
      ...
    

    是独立的。每个都定义了自己的变量。除了名字之外,它们没有任何共同点。连种类都不一样。

    两个变量的定义在函数离开的那一刻“消失”。


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

    你不要在这里这样做:

      char gridArray[MAX_COLUMN][MAX_ROW];
    

    【讨论】:

    • 好吧,malloced 对象不会消失。它们泄漏,因为它们不再可以从代码中访问。
    猜你喜欢
    • 2016-04-22
    • 2016-12-10
    • 2012-12-14
    • 1970-01-01
    • 2022-01-10
    • 2013-03-30
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多