不推荐将字符串常量转换为'char *'

时间:2015-01-19 14:51:33

标签: c++

这段代码出了什么问题?

#include <stdio.h>
#include <dos.h>
#include <graphics.h>

int main()
    {
        int gd = DETECT, gm;
        initgraph(&gd, &gm, ""); /* this is where the error it says */ 
    }

它说错误:

   
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

我正在使用代码块,只是尝试运行我朋友的代码来进行演讲。

2 个答案:

答案 0 :(得分:3)

从C ++ 98开始,string literalschar*的转换已被弃用,并已在C ++ 11中完全删除。

这是因为C ++ 98及更高版本中的字符串文字是const char[]。虽然您的代码没有显示所需的全部内容,但这就是警告的原因。

如果您使用的是C,那么这很好,因为C中的字符串文字只是char[]

答案 1 :(得分:1)

这是由行

引起的
initgraph(&gd, &gm, "");

作为initgraph的原型

void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);

并且在符合标准的C ++中,字符串文字不能隐式转换为非const char*

如果您使用可以转换为char*的数组替换文字,警告就会消失:

char driver[] = "";
initgraph(&gd, &gm, driver);