我正在尝试转换一个一维数组(81个字符+ null),并将其转换为9x9字符网格。
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;
}
发布于 2021-10-01 13:50:50
您可以简单地使用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
发布于 2021-10-01 13:48:57
使用联合:
union myunion
{
char name[81];
char puzzle[9][9];
};
或指向数组的指针。
char name[81];
char (*puzzle)[9] = name;
https://stackoverflow.com/questions/69412259
复制