C 将一维数组转换为二维数组

问题描述 投票:0回答:2

我正在尝试转换一维数组(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-c
2个回答
2
投票

你可以简单地使用

memcpy()
.

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

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


或者,您可以这样做 without copying by risking triggering Undefined behavior.只需将

name
转换为
char(*)[9]
(指向 9 个字符的行的指针)。使用这个指针会违反 strict aliasing rule 因此结果不是由 C 标准定义的。但是,它可能会起作用:

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

1
投票

使用联合:

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

或指向数组的指针。

     char name[81];
     char (*puzzle)[9] = name;
© www.soinside.com 2019 - 2024. All rights reserved.