当我将字符串文字分配给static char*argv[]时,如何防止编译器发出警告

How do I prevent a compiler warning when I assign a string literal to static char *argv[]

本文关键字:何防止 编译器 警告 argv 文字 字符串 分配 char static      更新时间:2023-10-16

我从编译器收到以下警告

警告:不赞成从字符串常量转换为"char*"[-Wwrite strings]

对于声明:

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

在这个语句中,argv不能是const,因为我传递给它的函数不会接受它。

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

在C++之前的11次中,从字符串文字(类型const char[*])到char*的隐式转换只被弃用,因为C++11是一个错误(实际上修改它之前已经是UB了)。

创建一个可修改的数组并使用它,就像这样:

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

请注意,main的参数也有一个sentinel null指针。

如果你真的确定他们只是弄错了const,那么显式选角也可以,尽管这是一个非常肮脏的黑客。最好克制一下,把它清理干净。