C++:已弃用从字符串常量到 'LPSTR {aka char*}' [-Wwrite-strings] 的转换 - 警告。如何避免?

C++: deprecated conversion from string constant to 'LPSTR {aka char*}' [-Wwrite-strings] - warning. How to avoid?

本文关键字:-Wwrite-strings 转换 何避免 警告 aka 字符串 常量 C++ LPSTR char      更新时间:2023-10-16

在编译c++代码时,我得到了这个警告:

已弃用从字符串常量到'LPSTR{也就是char*}'的转换[-Wwrite-strings]
π)//指向PROCESS_INFORMATION结构的指针。
,,,,, ^

代码是:

STARTUPINFO si;
memset(&si, 0, sizeof (STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = FALSE;
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof (PROCESS_INFORMATION));
if (!CreateProcess("C:\Program Files\Java\jre7\bin\javaw.exe",
        " -jar install.jar", // Command line.
        NULL, // Process handle not inheritable.
        NULL, // Thread handle not inheritable.
        0, // Set handle inheritance to FALSE.
        CREATE_NO_WINDOW, // ON VISTA/WIN7, THIS CREATES NO WINDOW
        NULL, // Use parent's environment block.
        NULL, // Use parent's starting directory.
        &si, // Pointer to STARTUPINFO structure.
        &pi)) // Pointer to PROCESS_INFORMATION structure. //Warning comes from this line - variable &pi
{
    printf("CreateProcess failedn");
    return 0;
}

是否有可能做一些事情来避免这种情况(我的意思是不使用- suppress警告)?

编译器告诉你第二个参数是CreateProcess的类型是char*,但你传递的是const char*。换句话说,CreateProcess的第二个参数期望一个可修改的缓冲区,但是您传递的是一个不可修改的文字。

像这样声明一个可修改的字符串:

char cmdline[] = "-jar install.jar";

CreateProcess() API的第二个参数应该如下:

_Inout_opt_ LPTSTR lpCommandLine,

现在你直接传递const char*值,因此你得到了警告。

char cmdline[] = " -jar install.jar";

应避免此警告。