strcmp始终产生相同的结果

问题描述:

我有一个LinkedList实现,它保存包含单词和其他一些信息的结构。在LinkedList中,我有一个函数,用于检查一个单词是否已经包含在列表中的其中一个结构中的 。问题是,这个每一次都返回0。任何想法为什么这是?strcmp始终产生相同的结果

这个编译完全很好,除了if(strcmp(ll->value->word, word))声明之外,这个函数的每一个方面都起作用。

编辑:对不起,忘了添加!

int llContains(LinkedList* ll, char* word){ 

    LinkedList* nn= ll; 
    if(nn != NULL){ 
     for(int i=0; nn != NULL; i++){ 
      if(!strcmp(ll->value->word, word)){ 
       return i; 
      } 
      nn = nn->next; 
     } 
    } else { 
     return -1; 
    } 
} 
+0

你明白匹配字符串的'strcmp'返回0? – Nick 2013-05-09 07:36:43

+0

对不起,忘了放在'!'里。问题在于'else'。感谢您的帮助! – 2013-05-09 07:46:23

的代码是未定义行为存在通过函数没有明确的return的路径:如果forreturn不执行。

注意strcmp()回报0当串等于让forif如果字符串不匹配将是“真”。这意味着如果列表中的第一个条目不相等,则将返回0

更改为:

int llContains(LinkedList* ll, char* word){ 

    LinkedList* nn= ll; 
    if(nn != NULL){ 
     for(int i=0; nn != NULL; i++){ 
      if(strcmp(ll->value->word, word) == 0){ 
       return i; 
      } 
      nn = nn->next; 
     } 
    } 

    /* ALWAYS return a value. */ 
    return -1; 
} 
+0

真的...其他人不应该在那里 – 2013-05-09 07:38:49

+0

谢谢!就是这样。当时'else'似乎是一个非常好的主意,但显然不是。 – 2013-05-09 07:45:15

添加一些调试信息 “返回我” 之前

int llContains(LinkedList* ll, char* word){ 

LinkedList* nn= ll; 
if(nn != NULL){ 
    for(int i=0; nn != NULL; i++){ 
     if(strcmp(ll->value->word, word)){ 
      printf("Linked->word : %s, word : %s\n",ll->value->word, word); 
      return i; 
     } 
     nn = nn->next; 
    } 
} else { 
    return -1; 
} 

}

试试这个,让我们看看你有什么