2012-02-27 29 views
2

我有一套結構,我想存儲在一個匿名成員結構。每個小結構看起來像這樣:如何在匿名成員中存儲結構數組?

static struct { 
    uint16_t buf[256]; 
} bufData[8]; 

我知道一個事實,它只會有8個元素。我想包括該其他結構內,因爲這樣的:

static struct { 
    int size; 
    // I am not sure how to proceed 
    //char * bufData; 
    //struct * bufData; 
} Table[MAX_FILES]; 

的數據正在被輸入爲這樣:

for (int i = 0; i < 8; i++) { 
     loadData(i,bufData[i].buf); 
     printf("%s\n", bufData[i].buf); // This works 
    } 

,我希望存儲該表的j個元素,如Table [j] .bufData。目前我試過

memset(bufData, 0, sizeof(bufData)); 
Table[j].size = 256; 
Table[j].bufData = &bufData; 

然後解壓它,但它不起作用。

char * test = Table[j].bufData; 
for (int i = 0; i < 8; i++) { 
    printf("%s\n", test[i].buf); 
} 

我想我已經可怕地弄亂了這一個,我需要一些幫助解開它!

+1

'typedef'是你的朋友。 – 2012-02-27 09:53:10

+0

decl如何?尋找bufData,它是一個全局變量?堆?疊加麼? – 2012-02-27 10:02:24

+0

它是一個堆棧元素,對於每個Table [j]結構都是唯一的。 – Rio 2012-02-27 10:03:04

回答

2

由於bufData是一個結構,就應該將其存儲爲一個bufData指針(不是char指針),或者簡單地作爲bufData數組:

struct BufData /* this declares a type, not a variable */ 
{ 
    uint16_t buf[256]; 
}; 

選項1:

static struct 
{ 
    int size; 
    struct BufData* myBufData; 
} Table[MAX_FILES]; 

選項2:

static struct 
{ 
    int size; 
    struct BufData myBufData[8]; 
} Table[MAX_FILES]; 

編輯: 聲明一個結構的情況下,不要混淆聲明類型:

struct aStruct 
{ 
... 
}; 

與聲明變量使用未命名結構類型:

struct 
{ 
... 
} aVariable; 

與聲明兩個類型和變量WOF那種類型:

struct aStruct 
{ 
... 
} aVariable; 
+0

它給了我'test.c:120:22:錯誤:'結構'沒有成員名爲'bufData''這兩個選項(我檢查了語法)。 – Rio 2012-02-27 09:58:49

+0

所以我去聲明類型和變量,容器結構表抱怨''tests.c:44:19:錯誤:預期的標識符或'('之前'['token' ... – Rio 2012-02-27 10:12:28

+0

再次編輯,對不起。 – vulkanino 2012-02-27 10:18:11

相關問題