C const char * to const char * const

我目前正在为我的班级写一个作为一个非常基本的shell的作业.我差不多完成了,但是我遇到了execvp和我的参数字符数组的问题.这是我的代码的轻量级片段.

//Split the left content args
istringstream iss(left);
while(getline(iss, s, ' ')){
     v.push_back(s);
}

//Get the split string and put it into array
const char* cmd_left[v.size()+1];
for(unsigned int i = 0; i < v.size(); i++){
     cmd_left[i] = v.at(i).c_str();
}
cmd_left[v.size()] = 0;
v.clear();

这被……用了

execvp(cmd_left[0], cmd_left);

我的错误是

assign3.cxx:96:34: error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive]

我知道问题是我的字符数组没有充满常量数据,所以我需要从const char *到const char * const.我读了一些关于const_cast的内容,但我不确定这是否是我需要做的.

如果你会这么善良,你能帮助我让我的数组字符数组被该函数正确接受吗?如果您需要我发布更多我的代码,请告诉我.

谢谢

最佳答案
问题是你不能将const变量传递给期望非const参数的函数.

换句话说,const char *是char *的一个子集.

删除const

/*const*/ char* cmd_left[v.size()+1];

在这里添加const_cast

cmd_left[i] = const_cast<char *>( v.at(i).c_str() );

代码的其他部分看起来很可疑,但这会使它编译

转载注明原文:C const char * to const char * const - 代码日志