Вызов 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);
Другие вопросы по тегам