0

我有一个将 const ** char 作为函数参数的函数。我必须调用此函数的输入是一个字符串,我需要将其转换为 const char** ,其中每一行将是字符串的单个字符。

“字符串” => {“s”、“t”、“r”、“i”、“n”、“g”}

我能够使用上述数据创建一个 char**,但我无法将其转换为 const char**。编译器显然给出了错误。然后我创建了一个二维字符数组 char input[string.size()][2]。但是有了这个我迷失了如何将它转换为 const char**

更新:这就是我想要的 - (const char **)temp where temp is char[size][2]

4

2 回答 2

0

您可以尝试使用 const_cast 类型的指针。

int main(int ac, char **av)
{
 const char **const_av = const_cast<const char **>(av);

 return 0;
}
于 2013-07-10T07:11:46.333 回答
-1

如果我理解正确,你有一个char**(派生自一个char *[]?),并且你想给它分配一个char const**或用它来初始化一个char**。这是非法的,因为它会破坏 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" };

或者,也许该函数应该采用 a char const* const*(如果它没有修改任何内容)。Achar**将隐式转换为 this。

最后,如果它是一个遗留函数,您无法修改其签名,但实际上并没有修改任何内容,您可以使用 const_cast它来强制编译器接受它。

于 2013-07-10T08:26:51.343 回答