我有这个结构:
typedef struct { int mat[x][x]; int res; } graphe;
graphe g;
我无法访问图表矩阵的问题
例如我设置时:
int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g = { m[5][5], 5};
for(i=0;i<lignes;i++)
{
for(j=0;j<lignes;j++)
{
printf("%i ",g.mat[i][j]);
}
printf("\n");
}
printf("Res = %i ",g.res);
我有
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Res =0
通常应该是:
0 1 1 1 0
1 0 1 1 0
1 1 0 1 1
1 1 1 0 1
0 0 1 1 0
Res =5
你能帮助我吗?
答案 0 :(得分:0)
graphe.mat在结构内部是25(可能,在这种情况下必须至少为25)字节的保留内存。但m
是指向另一个内存位置的指针。 C和C ++都不允许将m
分配给结构的成员。
如果必须将数据复制到结构中,则必须使用memcpy
和朋友。如果要复制字符串,您还需要处理'\0'
终止符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct { int mat[5][5]; int res; } graphe;
int main(void) {
int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g;
memcpy( g.mat, m, sizeof(m));
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct { int mat[5][5]; int res; } graphe;
int main(void) {
int m[5][5]={{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
graphe g;
memcpy( g.mat, m, sizeof(m));
g.res= 5;
for(i=0;i<lignes;i++)
{
for(j=0;j<lignes;j++)
{
printf("%i ",g.mat[i][j]);
}
printf("\n");
}
printf("Res = %i ",g.res);
使用数组2D时要小心,不要像简单变量(如g.res)这样简单的做法,因为你必须指出数组的大小,所以你必须使用memcpy。