所以我有以下情况:
void func(char ** a)
{
// Do some stuff...
}
int main()
{
const char * arr[2] = { "foo" };
arr[1] = "bar";
// I want to Cast the arr from const char ** to char **
func(arr);
}
我认为
func(reinterpret_cast<char**>(arr));
是一种方法,但是我不知道这是否是最好的方法。谢谢!
最佳答案
对于初学者,此声明
const char * arr[2] = "foo";
是不正确的。数组是集合,其元素的初始化程序应括在大括号中。
const char * arr[2] = { "foo" };
在表达式中使用的数组(极少数异常(exception))将转换为
const char **
类型的指针。这个功能
void func(char ** a)
{
// Do some stuff...
}
不接受指向常量数据的指针。这意味着该函数可以更改指向的数据。反过来,这意味着您不应将数组传递给此函数。
您可以做的是动态分配一个数组数组,例如
char **p = new char *[2];
for ( size_t i = 0; i < 2; i++ )
{
p[i] = new char[4];
}
strcpy( p[0], "foo" );
strcpy( p[1], "bar" );
func( p );
for ( size_t i = 0; i < 2; i++ )
{
delete[] p[i];
}
delete[] p;
关于c++ - 从const char arr []转换为char **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62480700/