2013-11-05 82 views
-1

我有兩個結構數組和一個嵌套for循環。這兩個數組中有相同的單詞,但strcasestr未檢測到它們。我使用strcasestr在相同的單詞中查找子字符串。strcasestr無法正常工作

這裏是我的代碼片段:

for(int itr = 0; itr < arrayItr; itr++) 
{ 
    for(int itr2 = 0; itr2 < arrayItr2; itr2++) 
    { 
     if(strcasestr(termsArraypast[itr].term, termsArrayTerms[itr2].term) > 0) 
     { 
      printf("%d %d %s\n", termsArraypast[itr].charDistance, termsArraypast[itr].termDistance, termsArraypast[itr].term); 
     } 
    } 
} 

請知道,所有這些變量已經在我的程序申報。我剛剛在這個部分工作了好幾個小時,但無法弄清楚。謝謝。

+0

的條件是錯誤的。 'strcasestr'函數返回一個指向子串開始的指針,如果沒有找到該串,則返回NULL。整個技術上非空值大於零,你仍然應該比較'NULL'。 –

+0

至於問題,你傳遞給函數的兩個字符串的內容是什麼? –

回答

0

char * strcasestr(const char * haystack,const char * needle);

返回一個指向子串的開頭或空,如果字符串中沒有找到

因此,這將返回一個指針值不是其可以是整數範圍之外的整數。

並且您將它與大於0進行比較。這是錯誤的,你可以檢查不是零。

例如:程序

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

    int main() 
    { 
char arr1[10]; 
char arr2[10]; 
int ret; 
strcpy(arr1,"foobar"); 
strcpy(arr2,"foobar"); 
printf("arr1 %s\n",arr1); 
printf("arr2 %s\n",arr2); 

ret= strcasestr(arr1,arr2) ; 

printf("ret %d ret %p \n",ret,ret); 
if(strcasestr(arr1,arr2) >0) 
{ 
    printf("sub found\n"); 
} 
    if(strcasestr(arr1,arr2) != 0) 
    printf("substring found for not null check \n");  
} 

O/P

arr1 foobar 
arr2 foobar 
ret -1073787886 ret 0xbfff4c12 
substring found for not null check