2013-11-14 4 views
1

공백으로 짝을 지우고 일부 조건부 논리를 수행하려고 시도하지만 char *에 strcmp를 사용하면 작동하지 않습니다.char *에 strcmp가 컴파일되지만 작동하지 않습니다.

int main(void) 
{ 
    char buf[64]; 
    char *cmd; 

    // assign some space delimited words to buf... 

    if (strcmp(buf, "somestring junk") == 0) { // this works 
     // do stuff here 
    } 

    cmd = strtok(buf, " "); 

    if (strcmp(cmd, "somestring") == 0) { // this doesn't work 
     // do stuff here 
    } 

    return 0; 
} 

'somestring'또는 'somestring \ n'과 같은 다양한 변형을 시도해 보았습니다. 코드가 오류 또는 경고없이 컴파일됩니다. strcmp에 대한 맨 페이지는 strcmp가 작동해야한다고 믿게합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+3

나는 *** 디버거에서 이것을 실행했습니다. (오른쪽?) 디버거가 말하는 'buf'의 실제 값은 무엇입니까? – abelenky

+0

완전한 예를 제공해주세요 - 도와 드리겠습니다! – Daniel

답변

1

strcmp에서 cmd와 buf가 섞여서 작동하지 않았습니다. 다음 코드는 당신을 위해 작동합니다 :

#include <stdio.h> 
#include <cstring> 

int main(void) 
{ 
    char buf[64] = "somestring junk"; 
    char *cmd; 

    // assign some space delimited words to buf... 

    if (strcmp(buf, "somestring junk") == 0) 
    { 
      printf("First strcmp works!\n"); 
    } 

    cmd = strtok(buf, " "); 

    if (strcmp(cmd, "somestring") == 0) 
    { 
     printf("Second strcmp works!"); 
    } 

    return 0; 
} 
+0

맞습니다. 코드 스 니펫을 편집 하겠지만 문제는 지속됩니다. – user2227422

+0

정말요? 그것은 이상한 일입니다. 다시 휴식을 취할 때 이것을 더 깊이 연구 할 것입니다. –

+0

문제를 발견했습니다. 테스트 문자열에 공백을 넣지 않고 테스트하면 후행하는 \ n 또는 cr 문자가 있습니다. 그래도 도움을 주셔서 감사합니다. – user2227422