2012-11-11 26 views
0

我有這個函數需要char **和char *作爲參數,它應該返回char *中的char *索引或如果不在字符串數組中,則返回-1。我敢肯定的錯誤是while(arr[i] != NULL)...,但我不知道該怎麼辦。Segfault,同時發現char *中char *的索引**

int isInArray(char** arr, char* str) { 
     int i = 0; 
     while(arr[i] != NULL) { 
       if(strcmp(arr[i], str) == 0) 
         return i; 
       i++; 
     } 
     return -1; 
} 
+0

看起來不錯。請張貼您發送的參數。你的代碼假設數組以空指針結束,我猜測它不。 – vidstige

回答

2

你可能忘了設定的arr最後char*元素設置爲null。如果你不能這樣做,那麼你應該引入第三個參數size_t arr_len來傳遞arr的長度。

無關提示:由於你沒有修改*str*arr,是const,正確及用途:

int isInArray(const char* const* arr, const char* str) 
+0

感謝您的提示,是的,你是對的,我忘了我最初是把NULL放在最後,但我不喜歡它,並擺脫它,只是忘了那個功能。謝謝! –

0

你的錯誤是,你不必在數組的長度。 arr [i]會導致您的編程讀取錯誤的內存。

爲您的函數添加一個「int length」參數,然後使用 代替while(int i = 0; i < length; i ++) 。 這樣,你永遠不會超出數組的邊界,這是((arr [i]!= NULL不能保證)