c-将一个char*[]数组传递到一个使用参数const char**的函数中



所以我有一个库函数,它将const char**作为其参数之一,以表示char*s的数组。

void libraryFunc(const char ** parameter);

所以我目前正在做的是(全部用C btw):

char *string1 = "myString";
char *string2 = "myString2";
char *stringArray[2] = { string1, string2 };
libraryFunc(&stringArray[0]);

^这会导致编译器错误,显示"没有对libraryFunc的匹配调用"。我也尝试过以下方法:

libraryFunc(stringArray);
libraryFunc(&stringArray);

似乎想不通。

您可以投射它:

libraryFunc( (const char **) stringArray);

或者,最好只是更改数组的声明:

char *string1 = "myString";
char *string2 = "myString2";
const char *stringArray[2] = { string1, string2 };
libraryFunc(stringArray);

您不能将char **隐式转换为const char **,因为它只在第一级间接层工作(请注意,在上面的第二个摘录中,您将把char *隐式转换成const char *,因为它在第一级直接层,所以这很好)。这个来自comp.lang.cFAQ的问题更详细地解释了为什么它会以这种方式工作。

这是因为您试图通过

char* - a pointer

const char** - pointer to pointer to const char

const的使用是一个约定,不能通过间接使用两个指针来满足这个约定。之所以如此,是因为否则你总是可以像这样更改这个常量字符应用程序(这是从C++标准中获得的,我有意见):

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed (thankfully!)
                ^^^ here the bundit is hidden under const: "I will not modify"
*pcc = &c;                // *pcc is "pointer to const" right? so this is allowed...
*pc = 'C';                // would allow to modify a const object, *pc is char right?

有关更多详细信息,您可以关注我对类似主题的另一个回答:https://stackoverflow.com/a/16390371/1141471

在线代码:

http://coliru.stacked-crooked.com/a/74392c59cfc3ef70

最新更新