1

如何摆脱以下警告。

 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

4 回答 4

6

我认为您正在用 C++ 编译程序。

在 C++ 中,字符串文字具有 type const char[],与char []C 中的不同。

并且最好不要将字符串printf作为格式说明符传递,这可能会导致潜在的安全问题。

将其更改为:

void printMyString(const char *str){
    printf("%s", str);  
}
于 2013-08-30T08:36:22.660 回答
1

可能通过制作功能:

static void printMyString(const char *str)
{
   printf("%s", str);
}

这可以更好地完成三件事:

  1. 功能是static(一个小问题)。
  2. 参数是const char *,因为字符串文字是只读的。
  3. 打印是使用 完成%s的,因为将(可能未知的)字符串直接传递给printf(). 如果字符串包含 a %,这将导致printf()尝试格式化,但当然不存在格式化数据。这可能导致崩溃。
于 2013-08-30T08:36:45.730 回答
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++.

于 2013-08-30T08:36:30.480 回答
0

str将参数定义更改为const

void printMyString(const char *str) {
    printf(str);  
}
于 2013-08-30T08:36:46.690 回答