将“char **”发送到“const char **”函数参数中

时间:2013-12-04 01:55:41

标签: c

假设我有一个功能签名:

bool func(const char** arrayOfStrings);

我有一个带签名的辅助功能:

char** auxFunc(not relevant);

出于某种原因,我可以设法做到以下几点:

func(auxFunc(not relevant));

我收到编译器警告/错误:

错误:使用类型为'char * '的表达式初始化'const char * '会丢弃嵌套指针类型中的限定符

为什么这不能像我期望的那样工作,我能做些什么呢?

2 个答案:

答案 0 :(得分:2)

您要求编译器执行从char **const char **的隐式转换,这会危险地违反const-correctness规则。这就是编译器出错的原因。

阅读常见问题条目here以更好地了解问题(此处也有关于此问题的答案很多)。

之后,您应该确定在您的情况下什么是最佳解决方案:重新设计代码以消除问题或通过显式强制转换来抑制错误。没有更详细地了解你的设计/代码(你没有提供),没有人能为你做到这一点。

答案 1 :(得分:-2)

不幸的是,C不会从char **隐式转换为char const **,尽管这样做是安全的。您必须明确地func((char const **)(auxFunc()))投射它。