我有一个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;
}
}
答案 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;
}
}
试试这个,让我们看看你有什么