2013-04-06 2 views
2

내 C 프로그램 중 하나의 if 문에서 argv에 문제가 있습니다. 나는 내가 무언가 간단하고 어리석은 것을 잃어 버렸음에 틀림 없다는 것을 안다. 문제는 명령 행에 아무것도 지정하지 않으면 doOtherStuff()가 수행되지 않습니다. ./a.out -i로해도 doStuff()가 실행됩니다. 아무도 여기서 무엇을 놓칠지 알 수 있습니까? 미리 감사드립니다. 당신이 C에서 문자열을 비교하려면이상한 문제 if 문에 argv 사용

int main(int argc, char *argv[]) 

    if(argv[1] == "-a" || "-A") 
    { 
     doStuff(); 
    } 
    else 
    { 
     doOtherStuff(); 
    } 
} 

답변

4

당신은 strcmp와 같은 방법을 사용해야합니다 : http://www.cplusplus.com/reference/cstring/strcmp/ 당신이 두 배열의 메모리 주소를 비교할 수 있도록 문자열, 실제로 문자의 배열입니다 C에서

(다른 배열이기 때문에 물론 다릅니다).

+0

'operator || '의 사용법도 잘못되었습니다. – chris

+0

오, 이런. 나는 그것에 대해 완전히 잊었다. 감사! – wafflesausage

+0

호기심이 생길 경우'doStuff()'가 항상 호출되는 이유는'||'의 잘못된 사용 때문이었습니다 :'argv [1] == "-a"절은 항상 실패했기 때문에 실패합니다 문자열을 비교하는 유효한 방법이 아니며 각 문자열에 대한 포인터는 결코 같지 않습니다. 그러나 독방''-A ''는 항상 0이 아닌 주소를 가지기 때문에 항상 true가됩니다. 이는 if 문이 항상 true로 평가된다는 것을 의미합니다. –

3

C 문자열을 항등 연산자 (==)과 비교합니다.

대신 strcmp 함수를 사용해야합니다 (string.h에 정의 됨).

처럼 :

#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    if(strcmp(argv[1], "-a") == 0 || strcmp(argv[1], "-A") == 0) 
    { 
     doStuff(); 
    } 
    else 
    { 
     doOtherStuff(); 
    } 
} 

참고 문자열 비교는 프로그래밍에서 가장 기본 동작 중 하나이며, 당신의 if 문뿐만 아니라 수정되지 않았습니다. 기본 사항에 대해 자세히 읽으십시오. 아직 수행하지 않으 셨다면하십시오.