无法通过 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。 (包括和库)。链接器也是 -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
我正在使用 CodeBlocks 16.01。我也在 Dev-C++ 中尝试过,但没有成功。
首先我得到错误:
C:\Program Files (x86)\CodeBlocks\MinGW\include\graphics.h|302|error: redefinition of 'int right'
但是我通过更改graphics.h文件解决了,int right
需要替换为int top
。
还有 1 个警告 -
C:\Users\Davor\Desktop\New Project\drugi\main.cpp||In function 'int main()':|
C:\Users\Davor\Desktop\New Project\drugi\main.cpp|15|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
之后,当我按 'Build and run' 时,我得到
" *.exe has stopped working. "
In the background I first get -
Process returned 255 (0xFF) execution time : 91.666 s
Press any key to continue.
但每隔一段时间我都会 -
Process returned -1073741819 (0xC0000005) execution time : 26.494 s
Press any key to continue.
#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()
被声明为采用(非常量)char* 作为第三个参数 - 表明它是一个输出参数,指向initgraph()
将写入的可写字符数组。
除了产生您引用的警告外,将字符串常量 ""
作为参数传递会导致未定义的行为,其中崩溃就是一个很好的例子。
虽然我上面的评论是有效的,但在查看文档后我会推测该参数 不是 输出参数,缺少 const
是API 实施很差 - 显然没有任何方法可以确定初始化是否真的成功......
我找到了解决办法。
问题出在下一个图书馆:
libbgi.a
我试过很多不同的,但最后我找到了正确的。一旦我用旧的替换它 - 图形 window 打开并且工作正常,没有崩溃。
警告:
deprecated conversion from string constant to 'char*'
[-Wwrite-strings]|
仍然存在,但代码运行完美。
谢谢你的帮助。
干杯。
我什么都试过了,连这个简单的图代码都启动不了。我已经在所有正确的文件夹中安装了 graphics.h、winbgim.h 和 libbgi.a。 (包括和库)。链接器也是 -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
我正在使用 CodeBlocks 16.01。我也在 Dev-C++ 中尝试过,但没有成功。
首先我得到错误:
C:\Program Files (x86)\CodeBlocks\MinGW\include\graphics.h|302|error: redefinition of 'int right'
但是我通过更改graphics.h文件解决了,int right
需要替换为int top
。
还有 1 个警告 -
C:\Users\Davor\Desktop\New Project\drugi\main.cpp||In function 'int main()':| C:\Users\Davor\Desktop\New Project\drugi\main.cpp|15|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]| ||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
之后,当我按 'Build and run' 时,我得到
" *.exe has stopped working. " In the background I first get -
Process returned 255 (0xFF) execution time : 91.666 s Press any key to continue.
但每隔一段时间我都会 -
Process returned -1073741819 (0xC0000005) execution time : 26.494 s Press any key to continue.
#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()
被声明为采用(非常量)char* 作为第三个参数 - 表明它是一个输出参数,指向initgraph()
将写入的可写字符数组。
除了产生您引用的警告外,将字符串常量 ""
作为参数传递会导致未定义的行为,其中崩溃就是一个很好的例子。
虽然我上面的评论是有效的,但在查看文档后我会推测该参数 不是 输出参数,缺少 const
是API 实施很差 - 显然没有任何方法可以确定初始化是否真的成功......
我找到了解决办法。
问题出在下一个图书馆:
libbgi.a
我试过很多不同的,但最后我找到了正确的。一旦我用旧的替换它 - 图形 window 打开并且工作正常,没有崩溃。
警告:
deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
仍然存在,但代码运行完美。
谢谢你的帮助。
干杯。