如何摆脱警告:从字符串常量到char *的弃用转换
如何摆脱以下警告。
warning: deprecated conversion from string constant to char* [-Wwrite-strings]
这是代码。
#include #define MY_STRING "drivers.txt" void printMyString(char str[]){ printf(str); } int main(){ printMyString(MY_STRING); }
我想你是用C ++编译程序的。
在C ++中,字符串文字的类型为const char[]
,与C中的char []
。
最好不要将字符串作为格式说明符传递给printf
,这可能会导致潜在的安全问题。
将其更改为:
void printMyString(const char *str){ printf("%s", str); }
可能通过制作function:
static void printMyString(const char *str) { printf("%s", str); }
这样可以做得更好:
- 该函数是
static
(一个小点)。 - 参数是
const char *
,因为字符串文字是只读的。 - 打印是使用
%s
完成%s
,因为将(可能未知的)字符串直接传递给printf()
是危险的。 如果字符串包含%
,则会导致printf()
尝试格式化,但当然不存在格式化数据。 这可能导致崩溃。
更改
void printMyString(char str[]){ printf(str); }
至
void printMyString(const char str[]){ //or const char* since that is all that it is. printf(str); }
这与C ++更相关,因为在非const
指针中保存字符串文字是非法的。
你也可以用gcc
而不是g++
编译它。
将str
参数定义更改为const
:
void printMyString(const char *str) { printf(str); }