2010-02-20 6 views
6

과제에 대해서는 C 프로그램의 명령 행 인수가 필요합니다. 전에 argc/argv (C++에서) 문제없이 사용했지만 C 스타일 문자열이이 작동 방식에 영향을 미치는지 확신 할 수 없습니다.C에서 argv 사용?

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

    if(argc>1){ 
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]); 
    if(argv[1]=="-e"){ 
     // Do some stuff with argv[2] 
     system("PAUSE"); 
    } 
    else{ 
     printf("Error: Incorrect usage - first argument must be -e"); 
     return 0; 
    } 
    } 

그래서 내가 "은 Program.exe -e myargstuff"로 내 프로그램을 호출 오전하지만 난 점점 오전 : 여기 내 주요의 시작입니다 "오류 : 잘못된 사용은 ..."출력, 심지어 내 printf와 불구하고()는 argv [1]이 "-e"라고 알려줍니다. 도움이 필요하십니까? 감사!

+0

@Joe : <string.h>에서 함수 strcmp (그것은 C++ 사이트를 가리키는 불구하고 기능에 대한 참조도 유효)를 사용하여 당신은 당신의 질문에 가장 잘 답하는 답 중 옆에있는 상자를 체크하는 것을 고려할 수 있습니다. – jgottula

+0

팁 주셔서 감사! – Joe

답변

14

라인은

if(argv[1]=="-e"){ 

포인터가 아닌 문자열을 비교한다. 대신 strcmp 함수를 사용하십시오.

if(strcmp(argv[1],"-e")==0){ 
+1

하하. 대답 6을 작성하면 답변을 작성하는 데 걸리는 시간에 광산처럼. –

+0

글쎄, 그건 그랬어. 이것을 고쳐 주셔서 감사합니다, 저는 C에서 매우 새로 왔습니다! – Joe

3

그런 C- 문자열을 비교할 수 없습니다. strcmp (참조 here)를 사용하십시오.

c- 문자열은 실제로 포인터이므로 == 연산자는이 경우 결코 같지 않은 첫 번째 문자의 주소를 비교합니다.

2

==을 사용하여 C의 문자열을 비교할 수 없습니다. argv [1]의 주소와 리터럴의 주소를 비교하면 다른 주소가 될 수 있습니다.

대신 strcmp을 사용하십시오. 예 :

if (!strcmp("-e", argv[1])) { 
5

변경 :

if(argv[1]=="-e"){ 

if(strcmp(argv[1], "-e") == 0){ 

string.h을 포함한다.

5

getopt() 및 관련 기능을 확인하십시오. 그것은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다.

1

주 기능의 프로토 타입은 사용자가 char* 포인터를 다루고 있다고 말합니다. C에는 연산자 오버로딩이 없습니다. 따라서 == 두 개 사이의 char*이 같은 위치를 가리키고 있는지 테스트합니다.. 이것은 사실이 아니며 거의 발생하지 않습니다. 당신에 유래에 새로운 표시;

strcmp(argv[1], "-e") == 0