2013-09-02 2 views
-2

암 :이 코드의 문제점은 무엇입니까? 이러한 인수() evecvp 호출하려고

vector<string>subcommand; 
void parse(char *str) 
{ 
    pid_t pid; 
    char *cmd1=(char *)malloc(sizeof(300)); 

    cmd1=strtok(str," "); 
    while(cmd1!=NULL) 
    { 
     subcommand.push_back(cmd1); 
     cmd1=strtok(NULL," "); 
    } 

    subcommand.push_back('\0'); 
    vector<char const*> v(subcommand.size()); 
    for(int i = 0; i < v.size(); ++i) 
    { 
     v[i] = subcommand[i].c_str(); 
    } 

    fork(); 
    if(pid==0) 
     execvp(subcommand[0].c_str(),v); 

} 

는이 오류 얻을 :

main1.cpp: In function ‘void parse(char*)’: 
main1.cpp:80:34: error: cannot convert ‘std::vector<const char*>’ to ‘char* const*’ for argument ‘2’ to ‘int execvp(const char*, char* const*)’ 

타입 캐스팅 모든 순열을 시도를하지만 그냥 동작하지 않습니다. 무엇이 문제입니까?

+2

5-6 행의 거의 즉각적인 메모리 누수 외에도? (*** ***은 실제 오류 메시지를 게시 해 주셔서 감사합니다.) 그럼에도 불구하고, ['execvp()'] (http://linux.die.net/man/3/execvp) 문서를 보아라. 그러면'char const * '대신에'std :: vector ' arg []'두번째 인자. 아직 시도하지는 않았지만 대신 v.data()를 전달해보십시오. 최소한 당신을 가까이해야합니다. – WhozCraig

+2

그 제목은 질문과 관련이 없습니다. – chris

답변

1

변수 vexecvp(subcommand[0].c_str(),v); 문에서 vector<char const*>이고 evecvp는 int execvp(const char*, char* const*)입니다.

+0

필요한 인수로 올바르게 캐스팅하는 방법은 무엇입니까? –

+0

C++ 11에서는 [v.data()] (http://en.cppreference.com/w/cpp/container/vector/data)를 사용하십시오. –