암 :이 코드의 문제점은 무엇입니까? 이러한 인수() 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*)’
타입 캐스팅 모든 순열을 시도를하지만 그냥 동작하지 않습니다. 무엇이 문제입니까?
5-6 행의 거의 즉각적인 메모리 누수 외에도? (*** ***은 실제 오류 메시지를 게시 해 주셔서 감사합니다.) 그럼에도 불구하고, ['execvp()'] (http://linux.die.net/man/3/execvp) 문서를 보아라. 그러면'char const * '대신에'std :: vector' arg []'두번째 인자. 아직 시도하지는 않았지만 대신 v.data()를 전달해보십시오. 최소한 당신을 가까이해야합니다. –
WhozCraig
그 제목은 질문과 관련이 없습니다. – chris