C将一维数组转换为二维数组
Posted
技术标签:
【中文标题】C将一维数组转换为二维数组【英文标题】:C convert a 1D array into a 2D array 【发布时间】: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;
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于C将一维数组转换为二维数组的主要内容,如果未能解决你的问题,请参考以下文章