繁体   English   中英

无法通过C ++警告:(并且崩溃之后)不推荐将字符串常量转换为'char *'[-Wwrite-strings]

[英]Can't get pass C++ warning: (& crash after) deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

我尝试了一切,我甚至无法启动这个简单的图形代码。 我在所有正确的文件夹中安装了graphics.h,winbgim.h和libbgi.a。 (包括和lib)。 连接器,-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32

我正在使用CodeBlocks 16.01。 我也在Dev-C ++中试过没有运气。

首先我得到错误:

C:\\ Program Files(x86)\\ CodeBlocks \\ MinGW \\ include \\ graphics.h | 302 |错误:重新定义'int right'

但我解决了这个问题,通过更改graphics.h文件, int right需要用int top替换。

还有1个警告 -

C:\\ Users \\ Davor \\ Desktop \\ New Project \\ drugi \\ main.cpp ||在函数'int main()'中: C:\\ Users \\ Davor \\ Desktop \\ New Project \\ drugi \\ main.cpp | 15 |警告:不推荐将字符串常量转换为'char *'[-Wwrite-strings] | || ===构建完成:0个错误,1个警告(0分钟,0秒(秒))=== |

在那之后,当我按下“构建并运行”时,我得到了

“* .exe已停止工作。”在我第一次得到的背景中 -

进程返回255(0xFF)执行时间:91.666秒按任意键继续。

但每隔一段时间我都会 -

进程返回-1073741819(0xC0000005)执行时间:26.494 s按任意键继续。

#include <iostream>
#include <cstdlib>
#include <graphics.h>


using namespace std;



int main() {

    int gdriver = 9;
    int gmode = 2;
    int x;
    initgraph(&gdriver, &gmode, "");
    setbkcolor (WHITE);
    setcolor (BLACK);
    cleardevice();
    for (x = 260; x < 364; x = x + 5)
    {
        circle(x,240,60);
    }
    getch();
    closegraph();

    return 0;
}

如果没有查看<graphics.h> ,看来initgraph()被声明为将(非const)char *作为第三个参数 - 建议它是一个输出参数,指向一个可写的char数组initgraph()会写信给。

除了产生你引用的警告之外,传递字符串常量""作为参数将导致未定义的行为,其中崩溃是一个完美的例子。

虽然我上面的评论是有效的,但在查看文档后我会猜测参数不是输出参数,而缺少const只是简单的API实现 - 因为显然没有任何方法可以确定初始化是否真的成功了或不...

我找到了解决方案。

问题出在下一个图书馆:

libbgi.a

我尝试了不同的,但最后我发现了正确的。 一旦我用旧的替换它 - 图形窗口打开并且工作得很好,没有崩溃。

警告:

不推荐将字符串常量转换为'char *'[ - WRrite-strings] |

仍然存在,但代码完美无缺。

无论如何,谢谢你的帮助。

干杯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM