C语言 我怎样把结构体中的数组内容传递给函数?

holgip5t  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(174)

我有两个函数,一个是将文件的内容保存在一个名为“迷宫”的二维数组中,这个数组位于一个结构体中,另一方面,第二个函数是将这个二维数组的内容打印到控制台中。
我的问题是第二个函数没有打印结构体中的二维数组的内容,我相信是因为我没有正确传递数组的内容,但我不确定。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* X and Y will be used to define the size of the maze*/
#define X 20
#define Y 40

typedef struct
{
    char maze[X][Y]; /* X and Y have been defined as X = 20 and Y = 40*/
    char robot;
    int x,y;
    
}Cords;

这是我的函数原型:

void save_maze(Cords); 
void print_maze(Cords);

将文件内容保存到二维数组中的函数:

void save_maze(Cords border)
{
    int i,j,k,x,y;
    char wall;
    FILE *FileMaze;
    
    FileMaze = fopen("maze.txt","r");
    if (FileMaze == NULL) 
    {
    printf("\n The file is missing");
    }
    else
    {
        printf("File was open! \n");
        while(fscanf(FileMaze,"%d %d %c",&x,&y,&wall)!= EOF)
        {
             border.maze[x][y] = wall; 
        }
    }   
    
    fclose(FileMaze);
    printf("The Maze has been saved! \n");
    
}

应打印二维数组的函数:

void print_maze(Cords border)
{
    int i,j,k,x,y;
    int row,col;
    row=X;
    col=Y;
    for (i = 0; i <row ; i++) 
    {
        for (j = 0; j < col; j++)
        {
            if(border.maze[i][j] != 'x' && border.maze[i][j] != 'o' && border.maze[i][j] != 'S' && border.maze[i][j] != 'E')
            {
                border.maze[i][j] = ' ';
            } 
            else
            {
                printf("%2c",border.maze[i][j]);
            }
        }
        printf("\n\r");
    }   
}

“print_迷宫”函数不打印结构内部的2d数组的内容。

kkbh8khc

kkbh8khc1#

看起来您正尝试按值而不是按引用将结构体Cords传递给print_迷宫函数。这意味着print_maze函数中的border参数是原始结构体的副本,对函数内部border参数所做的任何更改都不会影响原始结构体。
要解决这个问题,可以使用指针通过引用传递struct。下面是修改函数签名和函数调用的方法:

void save_maze(Cords* border); 
void print_maze(Cords* border);
    
...
    
Cords border;
save_maze(&border);
print_maze(&border);

然后,您需要使用->而不是.来访问函数内部结构体的字段。

相关问题