2014-10-11 46 views
0

我有這樣的結構:初始化

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 

你能幫我嗎?

+2

'graphe g = {m [5] [5],5};''m [5] [5]'這裏只是一個超出界限的訪問。 – dyp 2014-10-11 23:03:39

+0

C和C++都不允許直接複製整個數組。此外,通過'= {..}'初始化允許省略大括號來初始化數組/結構成員。正如它目前所寫,你只用'= {m [5] [5],5}初始化'mat'成員的前兩個元素;' – dyp 2014-10-11 23:07:44

回答

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); 

要小心,因爲你必須表明你數組的大小,讓你擁有爲此使用memcpy。

+0

謝謝它的工作,但結果它不是真的我不知道爲什麼? {0,1,1,1,0},{0,1,0,1,1},{1,0,1,1,0},{0,1,1,1,1},{1 ,1,0,0,1} – 2014-10-12 00:17:16

+0

您能否提供您使用的c代碼! – 2014-10-12 00:21:59

+0

@Anis_Stack我可以問你,除了複製粘貼我的示例之前1小時發佈的內容外,你還提供了哪些其他信息? – 4pie0 2014-10-12 01:14:33

0

graphe.mat在結構中是25(可能它必須至少25個)保留內存字節。但是m是指向另一個內存位置的指針。 C和C++都不允許將m分配給結構的成員。

如果您必須將數據複製到結構中,則必須使用memcpy和朋友。在複製字符串的情況下,您也需要處理'\0'終止符。使用數組時,2D是不是一個簡單的做作喜歡簡單的變量(如g.res)

#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)); 

example

+0

它的工作原理但結果並非如此:{0,1, 1,1,0},{0,1,0,1,1},{1,0,1,1,0},{0,1,1,1,1},{1,1,0, 0,1}我不知道爲什麼? – 2014-10-11 23:50:43

+0

@SamiLi http://coliru.stacked-crooked.com/a/8550ca8e8b065144 – 4pie0 2014-10-11 23:55:07

+0

@SamiLi只是複製粘貼示例,如果你找不到錯誤或請粘貼完整的代碼,你執行 – 4pie0 2014-10-12 01:17:54