2012-02-27 49 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