2017-02-19 2 views
2

이것은 C++ARGV에서 요소 []

창에서

cmd를 선 사용자 유형

"p3.exe는"프로그램 이름입니다
p3.exe X <data.txt 

,

"X를 얻는 방법 "는 1, 2 또는 3이되며

이고"data.txt "는 프로그램에서 입력 용으로 사용하는 텍스트 파일입니다.

메인 메서드 내에서 argv [1]이 cmd 행에 입력 된 문자열 X와 같을 것으로 기대합니다. 실제로, 내가한다면

wcout << argv[1] 

출력은 "X"로 예상됩니다. 그래서 지금 이렇게

,

int main(int argc, char* argv[]) 
{ 
    if (argc > 1) 
    { 
      if (argv[1] == "X") 
      { 
       //do stuff 
      } 
    } 
    return 0; 
} // end main 

그러나 (변수는 argv [1] == "X")는 결코 내가 없거나 이해하고 있지 않다 어떤 사실

로 평가하지?

+0

그리고 어떤 값이'argv [1]'에 저장되어 있습니까? 디버거를 사용하여 코드를 단계별로 실행 해 보았습니까? –

+0

@ AlgirdasPreidžius 질문은 OP가했다. – interjay

+0

@interjay 아, 그걸 알지 못 했어 :/아마 빠른 질문을 건너 뛰었을거야 :/ –

답변

4

C 스타일 문자열 (char *)은 ==과 비교할 수 없습니다. 이는 포인터와 비교할 때만 포인터를 비교하기 때문입니다.

if (std::string(argv[1]) == "X") 
+0

둘 다 완벽하게 작동합니다. 그래서 두 번째 대답은 argv [1] 포인터를 문자열로 "형 변환"하여 작동합니까? – greg

+0

예, C 문자열을 비교를 수행하는 데 사용되는 임시 std :: string 개체로 복사합니다. argv [1]과 여러 값을 비교하려면 별도의 줄에 문자열을 만든 다음 각 값과 비교하면됩니다. – interjay

0

사용 if(strcmp(argv[1],"X")==0) ... : 비교 확인 적어도 한쪽은 C++ 문자열입니다

if (strcmp(argv[1], "X") == 0) 

또는합니다

당신은 strcmp를 사용할 수 있습니다. 문제를 해결해야합니다.