我从编译器收到以下警告
警告:不推荐将字符串常量转换为'char *'[-Wwrite-strings]
声明:
static char *argv[] = { "pingpong" };
在此声明中argv
不能是const
,因为我传递的功能不会接受它。
在没有编译器产生警告的情况下进行分配的正确方法是什么?
答案 0 :(得分:2)
虽然在C ++之前11次从字符串文字(类型const char[*]
)到char*
的隐式转换仅被弃用,因为C ++ 11是一个错误(实际修改它是早先的UB的话)。
创建一个可修改的数组并使用它,如下所示:
static char argv_0[] = "pingpong";
static char *argv[] = {argv_0};
请注意,main
的参数也有一个标记空指针。
如果你真的确定他们的const
错了,那么显式投射也可能有效,尽管这是一个非常糟糕的黑客攻击。更好地克制并清理它。