2013-11-05 8 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을 반환합니다. 기술적으로 널이 아닌 값이 모두 0보다 큰 경우에도 'NULL'과 비교해야합니다. –

+0

문제에 관해서, 함수에 전달한 두 문자열의 내용은 무엇입니까? –

답변

0

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

반환 문자열 그래서 포인터 값이 아닌 정수 범위 밖에있을 수 있습니다 정수를 반환합니다

발견되지 않은 경우 문자열의 시작 또는 null에 대한 포인터.

그리고이 값을 0보다 크게 비교합니다. 그건 틀렸어. 그냥 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 
관련 문제