如何摆脱警告:从字符串常量到char *的弃用转换

时间:2013-08-30 08:33:54

标签: c string

如何摆脱以下警告。

 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);   
}

4 个答案:

答案 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);
}

这样可以做得更好:

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