C 加载图形文件

C 加载图形文件,c,gcc,C,Gcc,我已经试了三天了。有人请帮帮我。 我已经安装了winbgim.h和其他必要的图形文件,但没有任何帮助。我已经搜索了所有可能的网站 序言:我删除了这个答案,然后又多次取消删除。还有其他的问题,但大部分似乎都集中在C++,这与C在这个领域有一些不同,或者已经被关闭作为一个问题的一个翻版。有些答案我不喜欢,或者不完整。因此,在一种可能的傲慢行为中,我提供了这个答案,我选择在这里提供它 由于我在代码中看到的唯一字符串常量是initgraph()的“”参数,因此必须从那里发出警告。在这种情况下,该函数的

我已经试了三天了。有人请帮帮我。 我已经安装了
winbgim.h
和其他必要的图形文件,但没有任何帮助。我已经搜索了所有可能的网站


序言:我删除了这个答案,然后又多次取消删除。还有其他的问题,但大部分似乎都集中在C++,这与C在这个领域有一些不同,或者已经被关闭作为一个问题的一个翻版。有些答案我不喜欢,或者不完整。因此,在一种可能的傲慢行为中,我提供了这个答案,我选择在这里提供它


由于我在代码中看到的唯一字符串常量是
initgraph()
“”
参数,因此必须从那里发出警告。在这种情况下,该函数的第三个参数必须声明为type
char*

在这种情况下,您所呈现的代码本身没有任何错误。根据该标准,字符串常量对应于
char
的数组,并且这种数组在大多数上下文中自动转换为指向其第一个元素的指针,在大多数上下文中对其进行求值,包括当它作为函数参数出现时。这与函数完全一致

问题是,该标准还规定,如果程序试图修改字符串文字的内容,则会产生未定义的行为。程序崩溃的实际表现形式并不少见。因此,尽管从技术上讲这是合法的,但当您将字符串常量转换为
char*
时,您会冒很大的风险,因为处理指针的人可能不知道尝试使用它修改指针指向的内容是不安全的。如果改为
const char*
,则不会出现此问题

GCC希望帮助您检测此类问题。因此,其
-Wwrite strings]
选项在启用时会导致字符串常量被视为
const char
的数组,而不是
char
的数组,从而触发您遇到的警告

您至少有三种选择:

  • 您可以禁用
    -Wwrite strings
    编译选项。对于具有经过良好测试的行为的遗留代码,这可能是最好的方法,但我不建议使用其他方法

  • 如果函数实际上不试图直接或间接修改其参数指向的数组,则可以将函数参数更改为type
    const char*
    。这可能需要一系列其他类似的更改,以避免额外的相关警告

  • 避免向函数传递字符串文字。而是创建并传递一个可变数组
    char
    。例如:


  • 请特别注意,尽管存在字符串文字,但它仅用于初始化不同的、非
    常量
    数组
    s

    的可能副本,请确定您使用的语言。C不是C++OP显然选择了C,建议的dupe目标似乎不适用。非常感谢@JohnBollinger的上述建议。。。。。我也这么做了(我将文件保存为.cpp,然后它就工作了)…程序会编译,但当我运行代码时,它就停止工作了。。。。在构建消息中,它显示构建文件:“无项目”中的“无目标”(编译器:未知)…为什么会发生这种情况?@RabinBK,您的新问题听起来像是项目配置的问题。更改源文件后缀可能会产生这样的问题(我注意到,这不在我的建议之列,也不一定是安全的)。关于这件事,我实在说不出更多。
    #include <graphics.h> //importing graphics
    #include <conio.h>
    
    int main()
    {
        int gd=0,gm;
        initgraph(&gd,&gm," ");
        circle(100,80,20);
        getch();
        closegraph();
    }
    
    warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    
    int gd = 0, gm;
    char s[] = " ";
    
    initgraph(&gd, &gm, s);
    // ...