如何摆脱警告:从字符串常量到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); } 

这样可以做得更好:

  1. 该函数是static (一个小点)。
  2. 参数是const char * ,因为字符串文字是只读的。
  3. 打印是使用%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); }