【发布时间】:2017-08-15 13:33:12
【问题描述】:
我一直认为const char **x 是用于动态分配的 const 字符串数组的正确类型,如下所示:
#include <stdlib.h>
int main()
{
const char **arr = malloc(10 * sizeof(const char *));
const char *str = "Hello!";
arr[0] = str;
free(arr);
}
但是,当使用 VS2017 编译此代码时,我在 free 行收到此警告:
warning C4090: 'function': different 'const' qualifiers
我的代码有问题吗? FWIW,当我使用 GCC 编译时,即使使用 -Wall -Wextra -pedantic,我也没有收到任何警告。
【问题讨论】:
-
贴出的程序完全没问题,警告是错误的。
-
代码看起来不错。如果要删除警告,您可以键入
arr即。free((void*)arr); -
error C2440: 'initializing': cannot convert from 'void *' to 'const char **'VS2015 给了我上述关于 malloc 行的错误。不过,显式类型转换可以修复它。 -
你确定你在VS中把代码编译为C吗?而不是 C++?
-
@Lundin 是的,它使用
/TC标志编译。由于void*到const char **的转换,编译为 C++ 会在mallocline 上产生错误。
标签: c visual-studio constants pointer-conversion