2010-01-04 2 views
2

다음 코드를 작성했지만 작동하지 않을 경우 두 번째 코드 단편을 변경할 때 사용합니다.C 문자열 문제를 비교하는 C++

int main(int argc, char *argv[]) 
{ 
    if(argv[ 1 ] == "-i") //This is what does not work 
    //Do Something 
} 

하지만 코드를 작성하면 작동합니다.

int main(int argc, char *argv[]) 
{ 
    string opti = "-i"; 

    if(argv[ 1 ] == opti) //This is what does work 
    //Do Something 
} 

문자열 클래스가 ==을 (를) 오버로드 된 멤버로 갖고 있으므로이 작업을 수행 할 수 있습니까? 사전에

감사합니다.

+0

을 strcmp를 사용하여 어떤 문제가 체크 아웃으로

#include <string.h> #include <stdio.h> int main(int argc, char *argv[]) { if((argc > 1) && (strcmp(argv[1], "-i") == 0)) { printf("got -i\n"); } } 

는 여러 PARAMS을 전달하는 경우? 나는이 일을하는 데 이점을 알고 싶었습니다 ... – rplusg

+1

명령 줄 옵션을 읽는 중입니다. 리눅스 머신을 사용하고 있다면 getopt() 함수를 확인하십시오. http://linux.die.net/man/3/getopt –

답변

11

문자열 클래스가 ==을 (를) 오버로드 된 멤버로 갖고 있으므로이 작업을 수행 할 수 있습니까?

정확합니다. char * 유형의 일반 값에는 연산자가 오버로드되어 있지 않습니다. 문자열 당신이 (직접 ==로)했던 방법을 비교하여

if (strcmp(argv[1], "-i") == 0) { 
    ... 
} 

을 C 문자열을 비교하려면 값 포인터의을 비교된다. "-i"은 컴파일시 간 상수이고 argv[1]은 다른 것이므로 절대로 같지 않습니다.

+0

친절하게 감사드립니다. – user174084

9

수정. argv[1] == "-i" (두 개의 char* 표현식에 == 사용)을 수행하면 문자열의 문자가 아닌 포인터가 같은지 비교할 수 있습니다. 문자열 데이터를 비교하려면 strcmp 함수를 사용해야합니다.

std::string은 string == string, char * == string 및 string == char *을 검사하는 연산자가 오버로드되어 있지만 이미 정의 된 의미가 있으므로 char * == char *를 오버로드하는 것은 불가능합니다. .

1

이 코드는 C에서 정상적으로 작동합니다. 오류가 발생하지 않도록 argc를 확인하십시오. 문자열의 최대 길이를 제한 할 때 문자열을 비교하는 더 안전한 방법 인 strncmp()도 있습니다. 명령 옵션이 getopt()