我尝试打印此列表时遇到的错误是不兼容的类型错误。我尝试将其转换为struct macro,static struct macro,指针,但没有一个工作。
struct macro {
struct macro *next;
char * macro_name;
char * macro_body;
};
static struct macro macro_list = {
.next = NULL,
.macro_name = NULL,
.macro_body = NULL
};
//--------------------------------------------------------------------------------
void macro_list_print(void){
printf("Printing macro_list\n");
if(macro_list.next == NULL){
printf("--No macros\n");
}
struct macro p = macro_list;
while(p.next != NULL){
printf("%s %s\n",p.macro_name,p.macro_body);
p = macro_list.next; //This line gives me the error.
}
}
我无法弄清楚这里要做什么。任何帮助都会被拨出来谢谢。
答案 0 :(得分:1)
p
是struct macro
而macro_list.next
是struct macro*
。改为:
struct macro* p = ¯o_list;
while(p != NULL){
printf("%s %s\n",p->macro_name,p->macro_body);
p = p->next;
}
我做了以下额外的更改:
macro_list.next
到p->next
,否则它永远不会超过列表中的第二项。while
中的条件更改为p != NULL
,否则它不会处理列表中的最后一个元素,因为它正在检查p->next != NULL
答案 1 :(得分:0)
p的类型为macro
,但macro_list.next的类型为macro *
。
我没有将macro_list定义为struct macro
(空名称和正文),而是将其定义为struct macro *
。
此外,当您浏览列表时,您希望p = p->next;
转到列表中的下一个项目。实际上,您总是分配macro_list.next
,因此您将反复查看列表中的第一项。
要像这样走链接列表,我通常会使用:
struct macro *macro_list = NULL;
for (p=macro_list; p!= NULL; p=p->next)
printf("%s %s\n", p->macro_name, p->macro_body);
答案 2 :(得分:0)
我想下一个是指针,所以:
void macro_list_print(void){
printf("Printing macro_list\n");
if(macro_list.next == NULL){
printf("--No macros\n");
}
struct macro* p = ¯o_list;
while(p->next != NULL){
printf("%s %s\n",p->macro_name,p->macro_body);
p = macro_list.next;
}
}