我有一个函数,它将const ** char作为函数参数。我必须调用此函数的输入是一个字符串,我需要将其转换为const char **,其中每一行都是字符串的单个字符。
“string”=> {“s”,“t”,“r”,“i”,“n”,“g”}
我能够使用上面的数据创建一个char **但是将它转换为const char **我无法做到。编译器显然给出了错误。然后我创建了一个二维字符数组char输入[string.size()] [2]。但有了这个,我迷失了如何将它转换为const char **
UPDATE:这就是我想要的 - (const char **)temp,其中temp是char [size] [2]
答案 0 :(得分:0)
您可以尝试使用const_cast作为指针的类型。
int main(int ac, char **av)
{
const char **const_av = const_cast<const char **>(av);
return 0;
}
答案 1 :(得分:-1)
如果我理解正确,你有char**
(源自
char *[]
?),您想为其分配char const**
或。{
用它来初始化char**
。这是非法的,因为它会
break const:
char const s[] = "abc";
char const** p = s;
char** q = p; // illegal without const_cast
char* ps = *q; // because it allows this
*ps = 'x';
你应该问问自己这里的const是什么。如果你是 处理字符串文字,而不是:
char* s[] = { "abc", "123", "xyz" };
你可能想要:
char const* s[] = { "abc", "123", "xyz" };
甚至:
char const* const s[] = { "abc", "123", "xyz" };
或者,也许该函数应该采用char const*
const*
(如果它什么都不修改)。 char**
将转换为
这隐含着。
最后,如果它是遗留功能,那么你的签名是不可能的
修改,但实际上没有修改任何东西,你可以使用
const_cast
强制编译器接受它。