C++ 当我向静态char*argv[]分配字符串文字时,如何防止编译器发出警告

C++ 当我向静态char*argv[]分配字符串文字时,如何防止编译器发出警告,c++,c++11,C++,C++11,我从编译器得到以下警告 警告:不推荐将字符串常量转换为“char*”[-Wwrite strings] 声明如下: static char *argv[] = { "pingpong" }; 在这个语句中,argv不能是常量,因为我将它传递给的函数不会接受它本身 在编译器不产生警告的情况下进行赋值的正确方法是什么?而在C++11之前,从字符串文本类型const char[*]到char*的隐式转换只是不推荐的,因为C++11实际上是一个错误,修改它已经很早了 创建一个可修改的数组并使用它,如下

我从编译器得到以下警告

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

声明如下:

static char *argv[] = { "pingpong" };
在这个语句中,argv不能是常量,因为我将它传递给的函数不会接受它本身


在编译器不产生警告的情况下进行赋值的正确方法是什么?

而在C++11之前,从字符串文本类型const char[*]到char*的隐式转换只是不推荐的,因为C++11实际上是一个错误,修改它已经很早了

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

static char argv_0[] = "pingpong";
static char *argv[] = {argv_0};
请注意,main的参数也有一个sentinel空指针


如果你真的确定他们只是把常量搞错了,那么显式转换也可能奏效,尽管这是一个非常肮脏的黑客行为。最好克制并清理它。

您在谈论什么功能?您可以忽略此警告,或关闭-Wwrite字符串,或使用强制转换来抑制警告。要知道这是否安全,您必须提供有关要将其传递给的函数的更多详细信息。该函数是否可能尝试写入字符串?@Matt,我们的讲师坚持我们编写的代码不会产生警告。事实上,我们的警告被视为错误。不幸的是,这不是一个选择。我们正在开发跨平台代码,尽管它可能在我们的平台上工作,但在另一个平台上可能不工作。