C中嵌套结构中的访问项

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

我尝试在另一个结构中访问“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->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
保留为空。如果下面的答案不能解决您的问题,我会在“编译器错误”之前考虑宏冲突<代码>列表
可能已在某些标题中定义为宏。要进行调查,可以尝试取消定义,或者更好地查看预处理的输出。