C中嵌套结构中的访问项
我尝试在另一个结构中访问“next”,但失败了,尽管我尝试了许多方法 以下是嵌套结构:C中嵌套结构中的访问项,c,C,我尝试在另一个结构中访问“next”,但失败了,尽管我尝试了许多方法 以下是嵌套结构: struct list_head { struct list_head *next, *prev; }; typedef struct { char *key; char *value; struct list_head list; }dict_entry; 我想进入“下一步”。我初始化一个新的dict\u条目 dict_entry *d; while(d->list->n
struct list_head {
struct list_head *next, *prev;
};
typedef struct {
char *key;
char *value;
struct list_head list;
}dict_entry;
我想进入“下一步”。我初始化一个新的dict\u条目
dict_entry *d;
while(d->list->next!=NULL){}
但这是错误的。谁能给我一个进入“下一个”的方法吗?
注意:我无法更改结构
列表
未声明为指针,因此不使用->
运算符获取其成员,而是使用
运算符:
while (d->list.next != NULL) {
}
另一种修复方法:
typedef struct {
char *key;
char *value;
struct list_head *list;
}dict_entry;
这样,您试图引用下一个
的原始代码将被编译。在您的定义中,您将列表
定义为一个对象,如下所示
typedef struct {
char *key;
char *value;
struct list_head list; // This is an object
}dict_entry;
因此,您将通过
操作符作为d->list.next
取消引用next
。第一级取消引用,即d->list
需要->
运算符,因为d
定义为指针。对于next
,由于list
是一个对象而不是一个指针,因此必须使用
运算符。OP,您是否初始化了d
?语句dict_entry*d代码>将d
保留为空。如果下面的答案不能解决您的问题,我会在“编译器错误”之前考虑宏冲突<代码>列表
可能已在某些标题中定义为宏。要进行调查,可以尝试取消定义,或者更好地查看预处理的输出。