对非常量字符[]调用execl

Call execl on a non-const char[]

本文关键字:调用 execl 字符 非常 常量      更新时间:2023-10-16

我正在vector<string>中从键盘获取命令,我想在execl()中使用,但execl()需要const char *。有没有其他类似于execl的函数可以使用char*参数,或者我如何用char*调用execl

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);
    }
}

const char *并不意味着参数必须const,它意味着可以const.

这里没有问题需要解决。

您可以用char[]生成std::string,然后使用返回const char*:的std::string::data()

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);