当我将字符串文字分配给static char*argv[]时,如何防止编译器发出警告
How do I prevent a compiler warning when I assign a string literal to static char *argv[]
我从编译器收到以下警告
警告:不赞成从字符串常量转换为"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
,那么显式选角也可以,尽管这是一个非常肮脏的黑客。最好克制一下,把它清理干净。
相关文章:
- 防止主数据类型C++的隐式转换
- C/C++编译器通常会删除重复的库吗
- 防止编译器分离函数的指令
- C++ 编译器正在更改我的结构的对齐方式.我怎样才能防止这种情况
- 如何防止Visual Studio 2008 C编译器在发生某些错误时停止?
- #ifndef是否可以防止循环引用编译器错误
- 如何防止编译器省略未显式实例化的类型?
- 如何防止输出屏幕在 Visual Studio 2013 C++编译器中消失
- C++如何防止编译器在调用函数时进行隐式转换
- 如何防止编译器/链接器去除特定符号
- 如何防止编译器优化对从未使用的变量的加载
- 当我将字符串文字分配给static char*argv[]时,如何防止编译器发出警告
- 防止编译器在C++03中考虑隐式声明的复制构造函数
- as-if规则是否防止编译器对全局/成员变量的访问重新排序
- 如何防止Gradle/Android Studio覆盖CMake提供的c++编译器设置?
- 什么是浮点推测,它与编译器的浮点模型有何不同
- 防止英特尔编译器过度优化未使用的变量
- C++11编译器何时会使RVO和NRVO优于移动语义和常量引用绑定
- 如何最好地防止库(源)和应用程序(头)编译之间的(编译器)标志不匹配
- 如何防止基于 g++ 编译器版本的不同编译