这是一个关于使用指针跨多个函数管理单个2D数组的概念性问题。该程序归结为获得一个二维字符矩阵,然后搜索该矩阵的特定单词。
以下是我的方法分两步:
1)通过char读取文件char的函数,将所有非空格字符放入2D矩阵。然后返回矩阵以便在其他地方进行操作(这是我遇到的麻烦)
2)获取由1创建的2D矩阵并搜索单词
的函数第一步的问题是指针。我认为最好的想法是在main中创建2D数组(我知道最大大小为25x25)并传递该指针,以便函数可以查看/更改矩阵的数据。我只是无法弄清楚如何从主外部修改二维数组。
这是我的第一个功能片段以及我用来测试它的主要部分。
int main( int argc, char *argv[]) {
char game[25][25];
char (*g) = game;
buildPuzzle(argv[0], g); //game should be a pointer to the array, correct?
for (int i=0; i<25; i++) {
for (int j=0; j<25; j++) {
printf(" %c ", game[i][j]);
}
printf("\n");
}
}
//This function returns a pointer to the array containing the sorted input file
void buildPuzzle(char fileName[], char *puzzle[25][25]){
int rows = 0;
int colums = 0;
char currentChar = NULL;
//Tests to see if file can open
FILE *f;
f = fopen(fileName, "r");
if (f == NULL) {
printf("Can't open file %s\n", fileName);
exit(420);
}
//Scans through the file char by char.
//If it is a char it puts it in a row/col of puzzle[][] then goes to the next char by fgetc.
currentChar = fgetc(f);
while(1) {
if (currentChar = EOF)
break;
//If it hits the end of the line, it's time to go to the next row.
if (currentChar == '\n'){
rows++;
continue;
}
//Skips spaces
if (currentChar == ' '){
continue;
}
puzzle[rows][colums] = currentChar;
currentChar = fgetc(f);
}
fclose(f);
}
答案 0 :(得分:1)
您不需要char (*g) = game;
。你可以简单地调用buildPuzzle(argv[0], game);
并定义你的函数:
void buildPuzzle(char * fileName, char puzzle[25][25])
{
// ...
您必须在25
参数中包含puzzle
的第二维,因此编译器知道在第一维中为每个增量跳过25个字符。