这个问题的背景知识,我有一个带名字的链表,我不想在其中找到用户输入名称。为方便起见,我将名称(如果找到)复制到同一缓冲区,如下所示:
aux = filtCountriesHead; //head of my list
while (aux != NULL){
if (strstr(aux->data.name, buffer) != NULL){
strcpy(buffer, aux->data.name);
foundName = 1;
break;
}
aux = aux->next; //this is skipped for some reason
}
当我运行它时,它进入一个无限循环,因为它不执行aux = aux->下一行,我通过在调试器中运行找到它。它不会在'if'中执行任何操作(即使它确实如此,'break;'会使它退出循环,而不是再次运行)所以我完全没有想法。有人有解释吗?
提前致谢!
答案 0 :(得分:1)
如果没有更多数据,例如对aux
值的观察,则无法确定核心问题。但这是一个可能的解释......
如果您观察到aux = aux->next;
似乎无效的无限循环,则必须表示aux->next
等于aux
,即aux
指向自身。通常,链表的尾部会指向NULL
。
当然,循环列表结构需要在别处修复,因为列表不是在提供的代码中创建的。