从字符串常量到 'char*' 的转换已取消

depecrated conversion from string constant to 'char*'

本文关键字:转换 取消 char 常量 字符串      更新时间:2023-10-16

这段代码有什么问题?

#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]

正在使用代码块,只是尝试运行我从朋友那里获得的用于讲座的代码。

从 C++98 开始,不推荐使用字符串文本到 char* 的转换,并在 C++11 中完全删除。

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

如果您使用的是 C,这完全没问题,因为 C 中的字符串文字只是char[] .

这是由以下行引起的

initgraph(&gd, &gm, "");

因为initgraph的原型是

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

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

如果将文本替换为转换为 char* 的数组,则警告应该消失:

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