2013-06-28 2 views
1

나는 초보자이며 다음 코드에 문제가있다. 일반적으로 argv [1]에 따라 텍스트를 표시해야하지만 아무 것도 표시하지 않습니다.argv가 작동하지 않는 이유는 무엇입니까?

내가 뭘 잘못하고 있니? 당신 코드

#include <stdio.h> 

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

    if(argv[1] == "a" && argc > 1) printf("hello world, argc: %d\n", argc); 
    else if(argv[1] == "2" && argc > 1) printf("hello everyone, argc: %d\n", argc); 

    for(int i=0; i<argc; i++) printf("%s\n", argv[i]); 

    return 0; 
} 
+6

'=='대신'strcmp'를 사용해야합니다 –

+0

@Andreas 매우 빠르게 :) – ha9u63ar

+4

이 태그는 C++로,'(std :: string (argv [1]) == "a" 더 적절할 수도 있습니다. – Roddy

답변

5

strcmp을 사용하여 다음 코드는 작동합니다 :

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

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

    if(argc > 1 && strcmp(argv[1], "a") == 0) { 
     printf("hello world, argc: %d\n", argc); 
    } else if(argc > 1 && strcmp(argv[1], "2") == 0) { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for(int i=0; i<argc; i++) printf("%s\n", argv[i]); 

    return 0; 
} 

문제가 C++ 태그되어 있기 때문에, 사용 다음과 같이 C++과 유사합니다.

#include <iostream> 
#include <string> 

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

    if(argc > 1) { 
     std::string argv1(argv[1]); 

     if (argv1 == "a") { 
      std::cout << "hello world, argc: " << argc << std::endl; 
     } else if (argv1 == "2") { 
      std::cout << "hello everyone, argc: " << argc << std::endl; 
     } 
    } 

    for(int i=0; i<argc; i++) { 
     std::cout << argv[i] << std::endl; 
    } 

    return 0; 
} 
+0

대단히 감사합니다. :). – www

+0

더 명확하지 않습니다 :) – www

+0

Ops. 이제는 인수 "a"를 입력으로 보냈지 만 결과를 표시하지 않습니다.'./helloWorld "a"또는'./helloWorld a'는 어떤 분기에도 들어 가지 않습니다. – www

3

이 가장 중요한 문제 :

  • 인수가 확인하기 전에 인수의 수를 확인하여야한다.
  • 최대 길이를 알고있는 경우 strcmp() 또는 더 나은 strncmp()과 같은 표준 라이브러리 함수를 사용하여 문자열을 비교합니다.

여기는 코드 번호입니다. 희망이 도움이됩니다.

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

int main (int argc, char* argv[]) 
{ 
    if ((argc > 1) && ((strcmp(argv[1], "a") == 0))) 
    { 
     printf("hello world, argc: %d\n", argc); 
    } 
    else if ((argc > 1) && (strcmp(argv[1], "2") == 0)) 
    { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for (int i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 

    return 0; 
} 

일부 세부 사항은 비교 문자열입니다. 여기에 == 연산자를 사용하면 (오버로드하지 않았다면) 객체 주소를 비교하면됩니다 (두 경우 모두 char *). 분명히 문자열 리터럴과 인자 버퍼는 다른 주소를 가지고 있습니다. 내용을 비교해야합니다. 사실 C++에서는 std::string을 생성하고 비교 연산자를 사용할 수 있습니다.

그래서 == 운영자에 따라 작품을 다른, 더 C++ 솔루션 :

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

int main (int argc, char* argv[]) 
{ 
    if ((argc > 1) && (std::string(argv[1]) == "a")) 
    { 
     printf("hello world, argc: %d\n", argc); 
    } 
    else if ((argc > 1) && (std::string(argv[1]) == "2")) 
    { 
     printf("hello everyone, argc: %d\n", argc); 
    } 

    for (int i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 

    return 0; 
} 
+0

+1 - 18 초 동안 날 잡았습니다. :) –

+1

@ 앙드레아스 아직 기회가 있습니다. C++이 아닌 C++ 태그가 붙어 있습니다. – a3f

+2

@ a3f 완료 - 위 참조 : D –

관련 문제