2013-05-09 218 views
0

我有一個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

回答

0

的代碼是未定義行爲存在通過函數沒有明確的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

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)){ 
      printf("Linked->word : %s, word : %s\n",ll->value->word, word); 
      return i; 
     } 
     nn = nn->next; 
    } 
} else { 
    return -1; 
} 

}

試試這個,讓我們看看你有什麼

相關問題