2016-06-18 3 views
1

사용자로부터 입력 문자열을 가져 와서 트랙 목록에서 트랙을 검색하는 프로그램을 만들고있었습니다.이 프로그램을 codeblocks 컴파일러에서 실행하려고하면 strstr() 함수가 매번 0을 반환합니다. 왜?

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

char tracks[][80] = { 
         "I left my heart in harvard med school", 
         "Newark, newark - a wonderful town", 
         "Dancing with a dork", 
         "From here to maternity", 
         "The girl from Iwo Jima", 
}; 

void find_track(char search_for[]) 
{ 
    int i, m = 0; 
    for(i = 0; i<5; i++) 
    { 

컨트롤 코드 줄 개까지 도달

 m = strstr(tracks[i], search_for);  
     if(m) 
     { 
      printf("Track%i : '%s' \n", i, tracks[i]); 
     } 
    } 
} 

않는 strstr()는 0

int main() 
{ 
    char search_for[80]; 
    printf("Search for : "); 
    fflush(stdin); 
    fgets(search_for, 80, stdin); 
    find_track(search_for); 
    return 0 ; 

} 
+1

http://stackoverflow.com/questions/16905728/strstr-function – flaviodesousa

+0

복제본에는 'search_for'에 개행 문자가 포함되어 있습니다. – BLUEPIXY

답변

2

fgets 어떤 후행가 포함되어 있습니다 반환 newline이 항목의 일부였습니다. 이처럼 제거 할 수 있습니다.

search_for [ strcspn(search_for, "\r\n") ] = 0; // remove trailing newline etc 

그렇지 않으면 일치하는 항목을 찾을 수 없습니다.

fflush(stdin);은 비표준임을 유의하십시오. 링크 된 답변 중 하나에 주어진 scanf이 특정 공백을 사용하지 않는 한 첫 번째 공백에서 멈 춥니 다.

+0

이 프로그램은 현재 작동 중입니다. 하지만 왜 내가'fflush (stdin)'을 사용해서는 안되는지 알고 싶습니다. – Sudeep

+0

'fflush (stdin);'은 표준 C 구현의 일부는 아니지만 MSVC 및 다른 구현에서 정의됩니다. 그래서 휴대용이 아닙니다. –

+0

새로운 질문을 올렸습니다. 내가 조사했을 때'fflush (stdin) '을 사용하는 것이 나를 도와 줄 것이라는 것을 알게되었습니다. 그것을 사용하거나 대체 솔루션을 검색해야합니까? – Sudeep