2015-04-06 31 views
0

的结构成员阵列我有这两个结构C结构

struct List { 
    unsigned length; 
    char * value; 
}; 

struct bal { 
    List name;    
    List ** attributes;  
}; 

所以结构列表将处理字符的字符串,即时通讯将焦炭(用函数使用malloc)创建我的字符串。

我的结构BAL两个成员,一个是它是一个结构列表和其他成员是结构清单Array的名字,这样我就可以一个struct BAL添加属性。

我没有问题,直到我尝试访问我的一个结构BAL的属性列表。如果我的结构BAL为3个属性,我的属性列表的表示应该是这样的:

attributes[0]; 
attributes[1]; 
attributes[2]; 

每个位置是一个结构列表。所以,如果我想让说printf的一个属性,我的想法是,这是我一直做这样的事情:

bal firstBal; 

让我们说我在程序中添加3个属性。

然后将其打印出来,我做的事:

printf("The first attributes is : %s ", firstBal->attributes[0]->value); 

但是,当我这样做,我得到的错误:

error: request for member value in something not a structure or union 

但我不知道为什么?我的结构bal有一个成员是一个结构列表数组,所以当我添加一个结构列表在该数组中,我应该能够访问我的结构列表的成员价值。

我的结构列表的成员值是一个字符串,所以......

非常感谢您!

+0

我认为你需要用malloc()来发布零件。 – 2015-04-06 00:53:47

+0

你没有告诉你分配你的结构。没有这些信息,没有办法回答一些问题。另外,你声明'bal firstBal'指示'firstBal'为'struct',但是你可以将它作为指针引用:'firstBal - > ...'。您应该将其引用为:'firstBal.attributes [0] - > value',因为它不是指针。 ' - >'运算符用于* pointer *的结构(*例如*,如果您有声明'bal * firstBal;'并且您动态分配'firstBal')。 – lurker 2015-04-06 00:54:33

回答

0

我找出两个问题与您的代码:

  1. 您提到,在struct bal

    其他成员是struct List

    然而数组,成员attributes声明在代码作为List **,即作为指向的阵列变量和我的猜测是,这不是你想要的。

  2. ->运算符用于访问由指针变量指向的结构/联合的成员(这就是为什么它看起来这个箭头的原因)。然而,在你的代码不是这种情况下firstBal没有被定义为一个指针,但正如struct bal类型的变量。因此,为了使用它的成员字段,你应该使用.运营商,而不是运营商->(即firatBal.attributes)。现在

    firstBal->attributes[0]的类型取决于你想要什么。如果你坚持要属性类型为List **那么就没问题。然而,根据我上面的评论,假设它的正确类型是List *,那么使用数组访问运算符([])已经为您提供了变量而不是指向它的指针。换句话说firstBal->attributes[0]List类型的,未List *,这意味着你不能使用->操作符来访问它的成员,但应该使用.操作

0

您需要声明:

struct List attributes[3]; 

它的指针应该是*属性

pattributes = &属性[0];以下是