我有一个方法,我试图打电话。原型看起来像这样:
void MyMethod(const char* names[])
我想构造一个char *数组来传递给这个方法,但我不能训练语法。关于我能做的最好的事情是:
char* names[] = new char*[numNames];
但是这不能编译。有什么想法吗?
注意:我无法更改MyMethod的声明,这是一成不变的。
答案 0 :(得分:2)
虽然这里的其他人似乎都在忙着(正确地)解决你的语法问题(尾随[]
)但我怀疑你目前遇到的问题是如何将指针传递给指针常量,字符。您提供的原始语法是错误的,但这样做:
char **names = new char *[numNames];
// populate names[]
MyMethod(names);
不会完全解决您的问题。您将收到“无匹配函数调用”错误,因为您传递的参数是特定类型(指向指针指向char的指针),而该函数期望一个非平凡可转换的不同类型(指针到指针给const炭)。
简单的事实是,你不能从char **
开始。 See this 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)大大清理它,但是我保持了你开始时的颤抖动态。
答案 1 :(得分:0)
我有以下想法:
char** names = new char*[numNames];
顺便说一下,下面的函数声明声明了相同的函数
void MyMethod(const char* names[]);
void MyMethod(const char** names);
void MyMethod(const char* names[10]);
答案 2 :(得分:0)
char** names = new char*[numNames];
语法简述:
如果array只是char的数组,我们会说:
char* arr = new char[10]
^ ^ ^
T P T
T型
P - 指针(因为new
返回指针(如果成功,或抛出bad_alloc
))
因此,char *的数组是:
char* * arr = new char*[10]
^ ^ ^
T P T