如何摆脱以下警告。
warning: deprecated conversion from string constant to char* [-Wwrite-strings]
这是代码。
#include<stdio.h>
#define MY_STRING "drivers.txt"
void printMyString(char str[]){
printf(str);
}
int main(){
printMyString(MY_STRING);
}
答案 0 :(得分:6)
我认为你是用C ++编译程序的。
在C ++中,字符串文字的类型为const char[]
,与C中的char []
不同。
最好不要将字符串作为格式说明符传递给printf
,否则可能会导致潜在的安全问题。
将其更改为:
void printMyString(const char *str){
printf("%s", str);
}
答案 1 :(得分:1)
可能通过制作功能:
static void printMyString(const char *str)
{
printf("%s", str);
}
这样可以做得更好:
static
(小点)。const char *
,因为字符串文字是只读的。%s
进行打印,因为将(可能未知的)字符串直接传递给printf()
会很危险。如果字符串包含%
,则会导致printf()
尝试格式化,但当然不存在格式化数据。这可能会导致崩溃。答案 2 :(得分:0)
更改
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++
进行编译。
答案 3 :(得分:0)
将str
参数定义更改为const
:
void printMyString(const char *str) {
printf(str);
}