c ++转换2维char数组const char **

时间:2013-07-10 07:01:14

标签: c++ string multidimensional-array char

我有一个函数,它将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]

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强制编译器接受它。