【发布时间】: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 **不是二维数组,也不能指向一个或用作一个!并为参数使用不言自明的名称。argc和argv不仅没用,还具有误导性。