将字符串文字分配给静态字符* argv []时,如何防止编译器警告

时间:2014-11-07 00:41:14

标签: c++ c++11

我从编译器收到以下警告

  

警告:不推荐将字符串常量转换为'char *'[-Wwrite-strings]

声明:

static char *argv[] = { "pingpong" };

在此声明中argv不能是const,因为我传递的功能不会接受它。

在没有编译器产生警告的情况下进行分配的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

虽然在C ++之前11次从字符串文字(类型const char[*])到char*的隐式转换仅被弃用,因为C ++ 11是一个错误(实际修改它是早先的UB的话)。

创建一个可修改的数组并使用它,如下所示:

static char argv_0[] = "pingpong";
static char *argv[] = {argv_0};

请注意,main的参数也有一个标记空指针。

如果你真的确定他们的const错了,那么显式投射也可能有效,尽管这是一个非常糟糕的黑客攻击。更好地克制并清理它。