2013-10-11 8 views
0

함수를 열려고합니다 (파일을 열고, 그 함수를 사용하여 결과를 다른 파일로 뱉어냅니다). argv와 argc를 사용하고 온라인으로 모든 튜토리얼을 살펴 보겠습니다. argv [0]를 출력하면 파일 이름을 얻습니다. 제 질문은 내가 어떻게 설정합니까 다음 argv [1.2.n] 함수를 말할 수 있습니다. 따라서 사용자가 open (사용자가 프로그램 디렉토리에있는 후)을 입력하면 해당 기능이 열립니다. 뭔가 같은 :함수에 명령 줄 인수를 할당합니다.

void file(int * argc, char * * argv) 
{ 
    // 
} 

int main(int argc, char * * argv) 
{ 
    if (argv[1] == open) 
    { 
    file(argc, argv); 
    } 
    return 0; 
} 
+0

: 목표는 인수 중 하나에 따라 전화 다른 기능에 경우, 일반적인 솔루션은 기능에 대한 포인터에 문자열의지도를 사용하여, 다음과 같은 일을하는 것입니다 . 프로그램이 수용해야 할 매개 변수는 무엇이며 어떻게해야합니까? 또한 argv [0]에는 프로그램의 이름이 포함되어 있습니다. – codeling

+0

저는 여러분이 파이썬에서 매개 변수 풀기라고 불리는 것을 설명한다고 생각합니다. 그 맞습니까? –

+0

@nyarlathotep : 불명확 한 질문에 대해서는 [close-reason] (http://meta.stackexchange.com/questions/184154/)이 있습니다. 그것을 사용하십시오. –

답변

0

argvchar*[] (char * 포인터 배열)입니다. 따옴표로 묶어야하는 문자열 상수 (유형 char*)를 직접 비교할 수는 없습니다. 대신에, 난 당신이 C++ 문자열 형식으로 변환하는 것이 좋습니다 :

#include <string> 

void file(){ 
    // ... 
} 

int main(int argc, char *argv[]) { 
     if(argc>=2) 
     { 
       if(std::string(argv[1]) == "open") 
       { 
         file(); 
       } 

     } 
     else 
     { 
       // print usage 
     } 
} 
+0

'argv'의 타입은'char **'입니다. C++에는'* char []'과 같은 것이 없으며,'char * []'는 함수 매개 변수의 타입으로 사용할 수 없습니다. –

+0

@ JamesKanze 의견을 주셔서 감사합니다. 내 대답을 고쳐 줄게. – jofel

0

패스 매개 변수 exe 에의 패스. 쉬운 데이터 구조로 명령 줄 인수를 두는 것이 좋습니다.

vector<string> args(argv, argv + argc); 

이제 벡터를 함수에 전달할 수 있습니다.

1

는 argv의 첫 번째 문자열은 첫 번째 명령 행 인수 아니라, 보통의 : 함수에

void file(); 

이 ...

if (argv[1] == open){ 
      file(); 
     } 
+0

표준에 따르면,'argv [0]'은''프로그램을 호출하는 데 사용 된 이름이어야한다.'' .exe'. 물론 실제로는 유닉스에서는 구현할 수 없으며'argv [0]'에서 무엇이든 얻을 수 있습니다. –

0

그것은 당신이 요구하는지 정말 분명하지 않다. 당신의 묘사가 매우 불분명하다

MapType::const_iterator entry = map.find(argv[1]); 
if (entry == map.end()) { 
    std::cerr << "Unknown function " << argv[1] << std::endl; 
    returnCode = 1; 
} else { 
    (*entry->second)(); 
}