2013-11-23 2 views
0

나는 아주 간단한 것을 시도하고 있습니다. 사용자 입력 문자열을 "hello"와 비교하지만 strcmp는 작동하지 않으려 고합니다. 나는 명백한 무언가를 놓치고 있고 그것이 내 끈을 선언 한 것과 관련이 있다고 생각한다. 모든 도움은 대단히 감사하겠습니다. 명령에는 줄 바꿈가 없습니다 그냥 널 (null) 종료 될 때strcmp가 제대로 작동하지 않는 것 같습니다.

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

int main (void) 
{ 
    char command[4555], compare[] = "hello"; 
    fgets (command, sizeof (command), stdin); 
    printf ("%s\n%s\n", command, compare); 
    if (strcmp (command, compare) == 0) 
    { 
     printf ("The strings are equal"); 
    } else { 
     printf ("The strings are not equal"); 
    } 
} 
+0

테스트 전에 인쇄물이 이미 문제의 원인을 알려줍니다. 왜 빈 줄을 출력합니까? – Mat

+0

좀 더 디버깅을해야합니다. 고맙습니다. – user2929779

답변

3

fgets는 널 (NULL) 종료 후 버퍼에 줄 바꿈을 떠날 것이다.

+0

아하이 봐요. 고맙습니다. – user2929779

1

fgets를 사용하면 문자열에 '\ 0'앞에 '\ n'을 추가 할 수 있습니다. 사용하여 :

if(command[strlen(command)-1]=='\n') 
    command[strlen(command)-1]='\0'; 

당신은 그것을 삭제하고 효과적으로 문자열

+0

'strlen (command)'를 한 번 호출하고 변수에 저장된 결과를 두 번 사용하는 것이 더 좋을 것입니다. – glglgl

1

음을 비교합니다, 그냥 뭔가를 추가하려면, 예는 fgets는 입력 문자열에 '\ n'을 문자를 추가합니다.

그래서 같은 라이브러리에있는 strncmp 함수를 사용하는 것이 좋습니다.

strncmp (명령, 비교, strlen (명령) -1).

잘 작동합니다.

관련 문제