在C中更改2D数组中的信息

时间:2015-12-01 02:28:24

标签: c arrays multidimensional-array

这是一个关于使用指针跨多个函数管理单个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);
}

1 个答案:

答案 0 :(得分:1)

您不需要char (*g) = game;。你可以简单地调用buildPuzzle(argv[0], game);并定义你的函数:

void buildPuzzle(char * fileName, char puzzle[25][25])
{
   // ...

您必须在25参数中包含puzzle的第二维,因此编译器知道在第一维中为每个增量跳过25个字符。