C - 'if'之后的代码(和'while'内部的代码)不执行

时间:2018-05-17 22:05:20

标签: c if-statement while-loop linked-list

这个问题的背景知识,我有一个带名字的链表,我不想在其中找到用户输入名称。为方便起见,我将名称(如果找到)复制到同一缓冲区,如下所示:

  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;'会使它退出循环,而不是再次运行)所以我完全没有想法。有人有解释吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果没有更多数据,例如对aux值的观察,则无法确定核心问题。但这是一个可能的解释......

如果您观察到aux = aux->next;似乎无效的无限循环,则必须表示aux->next等于aux,即aux指向自身。通常,链表的尾部会指向NULL

当然,循环列表结构需要在别处修复,因为列表不是在提供的代码中创建的。