Я пытаюсь вызвать 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*)’
Перепробовал все перестановки с типизацией, но просто не могу заставить его работать.
В чем проблема?
Переменная v
является vector<char const*>
в заявлении execvp(subcommand[0].c_str(),v);
в то время как объявление evecvp int execvp(const char*, char* const*)
,
Других решений пока нет …