Вызов execl для неконстантного символа []
Я получаю команду с клавиатуры в vector<string>
и я хочу использовать в execl()
, но execl() принимает const char *
, Есть ли другая функция, похожая на execl
Я могу использовать, что занимает char*
параметры, или как я могу позвонить execl
со мной char*
?
void Process::exec(string & program, vector<string> & params){
int i;
char x=program[0];
if(x=='/'){
char * argq[params.size()];
for(i=0;i<params.size();i++){
argq[i]=(string_to_c_convert(params[i]));
}
if(params.size()==2){
execl(argq[0],argq[0],(char *)0);
}
if(params.size()==3){
execl(argq[0],argq[1],argq[2],(char *)0);
}
}
2 ответа
const char *
не означает, что аргумент должен быть const
значит это может быть const.
Здесь нет проблем для решения.
Вы могли бы сделать std::string
из вашего char[]
а затем использовать std::string::data()
который возвращает const char*
:
char * argq[params.size()];
for(i=0;i<params.size();i++){
argq[i]=(string_to_c_convert(params[i]));
}
const std::string args(argq);
execl(args.data()[0], args.data()[1], 0);
Видя, как у вас уже есть std::vector<std::string>
где я предполагаю каждый std::string
на самом деле просто один символ (на основе вашего цикла и string_to_c_convert
функция), вы можете пропустить char[]
в целом и сделайте следующее:
execl(params[0].c_str(), params[1].c_str(), 0);