我有这两个结构
struct List {
unsigned length;
char * value;
};
struct bal {
List name;
List ** attributes;
};
所以struct List将处理一个字符串,我通过char添加char(使用malloc的函数)来创建我的字符串。
我的struct bal是两个成员,一个是结构列表的名称,另一个成员是结构列表的数组,所以我可以将属性添加到struct bal。
在尝试访问struct bal的属性列表之前,我没有问题。如果我的struct 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
但我不明白为什么?我的struct bal有一个struct List的成员,所以当我在该数组中添加一个struct List时,我应该能够访问我的struct List的成员Value。
我的struct List的成员值是一个字符串,所以......
非常感谢!
答案 0 :(得分:0)
我发现您的代码存在两个问题:
您在struct bal
另一个成员是
的数组struct List
但是,成员attributes
在您的代码中声明为List **
,即作为指向List
变量数组的指针,我的猜测是这不是您想要的。< / p>
->
运算符用于访问指针变量指向的struct / union 的成员(这就是为什么它看起来像这个箭头的原因)。但是,在您的代码中并非如此,因为firstBal
未定义为指针,而是定义为struct bal
类型的变量。因此,要使用其成员字段,您应使用.
运算符而不是->
运算符(即firatBal.attributes
)。
现在,firstBal->attributes[0]
的类型取决于您想要的内容。如果您坚持使用List **
类型的属性,那就没关系。但是,根据我上面的评论,假设它的正确类型是List *
,那么使用数组访问运算符([]
)已经为您提供了变量而不是指向它的指针。换句话说,firstBal->attributes[0]
的类型为List
而非List *
,这意味着您无法使用->
运算符访问其成员,但应使用.
运营商
答案 1 :(得分:0)
你需要一份声明:
struct List attributes[3];
它的指针应该是 * pattributes
使用 pattributes =&amp; attributes [0]; 跟随。