gpt4 book ai didi

c - 如何读取动态分配矩阵的元素,其中每个元素都是一个结构

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:13 25 4
gpt4 key购买 nike

所以,我有一个包含 3 个不同指针变量的结构。我需要做的是启动一个动态分配的矩阵,其中每个元素都是该结构的类型。我认为我已经为矩阵和结构的成员正确分配了内存,但现在我不知道如何读取该矩阵的每个元素。我是初学者,请原谅我的编码风格或任何其他错误。我的问题是如何读取每个元素都是结构的动态分配矩阵的元素?

(我知道在结构中我可以写成“char *x,*y,*z;”但我可以这样看得更清楚)

typedef struct{char *type_present;
char *destination;
char *direction;
int no_available_presents;
}MAP;

int main(){
int max_line,max_col,i,j;
MAP **map;

//Allocating memory for the matrix

map=malloc(max_line * sizeof(MAP) );
for(i = 0; i < max_line; i++){
map[i]=calloc(col,sizeof(MAP));
}

//Allocating memory for the members of the structure

(*map)->destination=(char)malloc(1 * sizeof(char));
(*map)->direction=(char)malloc(1 * sizeof(char));
(*map)->type_present=(char)malloc(1 * sizeof(char));


/*Here is my problem, I don`t know if this is good, the warning is that
the format '%s' expects 'char' and the argument is '**char'.I know
that, I don`t know how to fix it but I think the real problem is that
my code here is simply incorrect.*/

for(i = 0; i < max_line; i++){
for(j = 0; j < max_col; j++){
scanf("%s\n", &(*map)->destination);
scanf("%s\n", &(*map)->direction);
scanf("%s\n", &(*map)->type_present);
scanf("%d\n", &(*map)->no_available_presents);
}
}

最佳答案

第一个问题是这一行:

map=malloc(max_line * sizeof(MAP) );

这里你需要一个指针数组,所以该行应该是:

map=malloc(max_line * sizeof(MAP*) );
^
notice

下一个问题是这部分

//Allocating memory for the members of the structure

(*map)->destination=(char)malloc(1 * sizeof(char));
(*map)->direction=(char)malloc(1 * sizeof(char));
(*map)->type_present=(char)malloc(1 * sizeof(char));

有几个原因是错误的。首先,您只初始化一个 MAP 而不是对所有 MAP 进行初始化。此外,当您想要存储字符串时,分配单个 char 是没有意义的。

所以初始化应该是:

//Allocating memory for the members of the structure
for(i = 0; i < max_line; i++){
{
for(j = 0; j < max_col; j++){
{
map[i][j].destination = malloc(MAX_STRING_LENGTH * sizeof(char));
map[i][j].direction = malloc(MAX_STRING_LENGTH * sizeof(char));
map[i][j].type_present = malloc(MAX_STRING_LENGTH * sizeof(char));
}
}

正如您在上面看到的,您可以通过 map[i][j] 访问各个结构,因此您的 scanf 可以是

scanf("%s\n", map[i][j].destination);

顺便说一句:scanf("%s.... 很糟糕,因为用户可能会溢出您的缓冲区。考虑使用 fgets 或至少使用 scanf( "%42s... 其中 42 是缓冲区长度(减 1)。

关于c - 如何读取动态分配矩阵的元素,其中每个元素都是一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com