如何制作结构矩阵或结构指针矩阵?矩阵a
中的元素应为Area
类型的结构。
这是我到目前为止所尝试的内容:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
char type_toy[20];
int nr;
char town[20];
char direction;
} Area;
void AllocMatrix(int N, int M, Area** a) {
int i;
a = malloc(N * sizeof(Area *));
for (i = 0; i < N; i++) {
a[i] = calloc(M, sizeof(Area*));
}
}
int main() {
int N, M;
Area** a;
printf("N = ..., M = ...");
scanf("%d %d", &N, &M);
AllocMatrix(N, M, a);
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
scanf ("%s", &a[i][j].town);
scanf ("%s", &a[i][j].type_toy);
scanf ("%d", &a[i][j].nr);
scanf ("%s", &a[i][j].direction);
}
}
return 0;
}
答案 0 :(得分:3)
void AllocMatrix(int N,int M,Area ** a){
应该是Area***
,否则指针的值传递副本将保存已分配内存的地址,并且调用者函数将无法获取它。
此外,
a [i] = calloc(M,sizeof(Area *));
应为sizeof(Area)
,如果我的第一点适用,则应为(*a)[i] =
答案 1 :(得分:1)
如果您不需要具有该功能,这是一个简单的选项:
scanf("%d %d", &N, &M);
Area (*a)[M] = calloc( N, sizeof *a );
和你的其余代码相同。最好在执行M > 0
之前检查malloc
,并在继续之前检查malloc
是否未返回NULL
,
您的scanfs也不正确:
"%s"
应为"%19s"
以防止缓冲区溢出&
不应包含%s
,这是因为%s
需要指向第一个字符的指针(不是指向整个数组的指针),当你使用数组的名称,它被隐式转换为指向第一个元素的指针。char direction;
应该有"%c"