在非常量 char[] 上调用 execl
Call execl on a non-const char[]
我在 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);
}
}
你可以制作一个 std::string
out of your char[]
and then use std::string::data()
其中 returns 一个 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);
const char *
并不意味着参数必须是const
,而是说它可以是const.
这里没有问题可以解决
我在 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);
}
}
你可以制作一个 std::string
out of your char[]
and then use std::string::data()
其中 returns 一个 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);
const char *
并不意味着参数必须是const
,而是说它可以是const.
这里没有问题可以解决