【问题标题】:C convert a 1D array into a 2D arrayC将一维数组转换为二维数组
【发布时间】:2021-11-23 11:28:49
【问题描述】:

我正在尝试转换一维数组(81 个字符 + 空)并将其放入 9 x 9 的字符网格中。

void convertArray(char lineHolder[])
{
    lineHolder[];      //I want this data
    converted2d[9][9];  //to go into that data
}
int drag(){
    char lineHolder[82];
    int puzzle = SOLVABLE;
    int last, i;
    last = i = 0;

    while ((last = getchar()) != EOF)
    {
      putchar(last);
        lineHolder[i] = last;
        i++;
    }
    return 0;
}

【问题讨论】:

    标签: arrays c 2d converters ansi


    【解决方案1】:

    您可以简单地使用memcpy()

    char name[82] = ... ;
    char puzzle[9][9];
    memcpy(puzzle, name, sizeof puzzle);
    

    两种类型的布局都由标准完美定义。


    或者,您可以在不进行复制的情况下执行此操作,但要冒着触发未定义行为的风险。只需将 name 转换为 char(*)[9](指向 9 个字符的行的指针)。使用这个指针将违反严格的别名规则,因此结果不是由 C 标准定义的。但是,它可能会起作用:

    char (*puzzle)[9] = (char(*)[9])name;
    // use puzzle[y][x] syntax later on
    

    【讨论】:

      【解决方案2】:

      使用联合:

      union myunion
      {
           char name[81];
           char puzzle[9][9];
      };
      

      或指向数组的指针。

           char name[81];
           char (*puzzle)[9] = name;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-18
        • 2018-02-19
        • 2012-03-08
        • 2020-03-26
        • 2021-07-20
        相关资源
        最近更新 更多