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;
}
}
的代码是未定义行为存在通过函数没有明确的return
的路径:如果for
内return
不执行。
注意strcmp()
回报0
当串等于让for
内if
如果字符串不匹配将是“真”。这意味着如果列表中的第一个条目不相等,则将返回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;
}
真的...其他人不应该在那里 – 2013-05-09 07:38:49
谢谢!就是这样。当时'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;
}
}
试试这个,让我们看看你有什么
你明白匹配字符串的'strcmp'返回0? – Nick 2013-05-09 07:36:43
对不起,忘了放在'!'里。问题在于'else'。感谢您的帮助! – 2013-05-09 07:46:23