strcmp总是产生相同的结果

时间:2013-05-09 07:33:53

标签: c strcmp

我有一个LinkedList实现,它包含包含单词和一些其他信息的结构。在LinkedList中,我有一个函数,它检查一个单词是否是 已经包含在列表中的一个结构中。问题是,每次都返回0。知道为什么会这样吗?

这完全编译,除了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;
    }
}

2 个答案:

答案 0 :(得分:0)

代码具有未定义的行为,因为有一条没有明确return的函数的路径:如果return中的for未执行。

请注意,strcmp()在字符串相等时返回0,因此如果字符串不匹配,则if中的for将为“true”。这意味着如果列表中的第一个条目不相等,则将返回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;
}

答案 1 :(得分:0)

在“return i”之前添加一些调试信息

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;
}

}

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