Am пытается вызвать 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) документацию, тогда поймите, что вы передаете 'std :: vector', а не 'char const * arg [] 'для второго аргумента. Я еще не пробовал, но попробуйте передать 'v.data()' вместо этого. Это должно по крайней мере приблизить вас. –
WhozCraig
Это название не имеет отношения к вопросу. – chris