无法从'char **'转换为'char *[]'

Cannot convert from 'char **' to 'char *[]'

本文关键字:char 转换      更新时间:2023-10-16

我有一种我要调用的方法。原型看起来像这样:

void MyMethod(const char* names[])

我想构造一个char*的数组以传递此方法,但是我无法锻炼语法。关于我能做的最好的是:

char* names[] = new char*[numNames];

但这不会编译。有什么想法吗?

注意:我无法更改myMethod的声明,这是用石头设置的。

虽然这里的其他所有人似乎都挂在(正确)解决您的语法(Tagring [])我现在怀疑您目前正在努力的问题是如何通过指针到指针到const-char。您提供的原始语法是错误的,但是这样做:

char **names = new char *[numNames];
// populate names[]
MyMethod(names);

无法完全解决您的问题。您将收到"无匹配函数调用"错误,因为您传递的参数是特定类型的(指针到点到char),而该函数期望不可忽视的不同类型(指针到销钉到const-char)。

简单的事实是,您不能从char **做到这一点。出于原因,请参见此Question/Answers ,但是长时间的类型根本不兼容。如果您想在不更改该原型的情况下执行此操作,那么您将不得不做类似的事情:

int numNames = 5;
char **names = new char *[numNames];
// populate your names[], then...
const char **ro_names = new const char *[numNames];
std::copy(names, names+numNames, ro_names);
MyMethod(ro_names);
delete [] ro_names;
// clean up names[] elements, then...
delete [] names;

我知道。您可以使用向量(无论如何您都应该使用它,BTW)对其进行大量清理,但是我一直保持着令人震惊的动态,因为它们是您开始的。

我有以下想法:

char** names = new char*[numNames];

顺便说一句,以下函数声明声明相同的函数

void MyMethod(const char* names[]);
void MyMethod(const char** names);
void MyMethod(const char* names[10]);
char** names = new char*[numNames];

syntax简要:

如果数组只是字符的数组,我们会说:

char* arr = new char[10]
 ^  ^             ^
 T  P             T

t-类型

P-指针(因为new返回指针(如果成功或抛出bad_alloc))

因此,char*的数组是:

char* * arr = new char*[10]
 ^    ^             ^
 T    P             T