gpt4 book ai didi

c++ - 无法从 'char **' 转换为 'char *[]'

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:30 25 4
gpt4 key购买 nike

我有一个要调用的方法。原型(prototype)看起来像这样:

void MyMethod(const char* names[])

我想构造一个 char* 数组来传递给这个方法,但我无法练习语法。我能做的最好的事情是:

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

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

注意:我无法更改 MyMethod 的声明,这是一成不变的。

最佳答案

虽然这里的其他人似乎都在(正确地)解决你的语法问题(尾随 []),但我怀疑你目前一直在努力解决的问题是如何传递指向-指向常量字符的指针。您提供的原始语法是错误的,但是这样做:

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

// populate names[]

MyMethod(names);

不会完全解决您的问题。您将收到“无匹配函数调用”错误,因为您传递的参数属于特定类型(指向字符的指针),而该函数需要一个非平凡可转换的不同类型(指向常量字符的指针)。

一个简单的事实是,您不能从 char ** 执行此操作。 See this question/answers 的原因,但它的长短是类型根本不兼容。如果您想在不更改原型(prototype)的情况下执行此操作,则必须执行以下操作:

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;

我知道很可怕。您可以使用 vector (顺便说一句,无论如何您都应该使用它)来显着清理它,但我保留了您开始时的颤抖动态。

关于c++ - 无法从 'char **' 转换为 'char *[]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com