编译C ++代码时,我收到此警告:
已弃用从字符串常量转换为'LPSTR {aka char *}' [-Wwrite串]
& pi))//指向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 failed\n");
return 0;
}
是否可以采取措施避免这种情况(我的意思是不使用 - 抑制警告)?
答案 0 :(得分:5)
编译器告诉您,CreateProcess
的第二个参数属于char*
类型,但您传递的是const char*
。换句话说,CreateProcess
的第二个参数需要一个可修改的缓冲区,但是你传递的是一个不可修改的文字。
声明一个可修改的字符串,如下所示:
char cmdline[] = "-jar install.jar";
答案 1 :(得分:0)
CreateProcess()API的第二个参数应如下所示:
_Inout_opt_ LPTSTR lpCommandLine,
现在你在这里直接传递const char *值,因此你得到了警告。
char cmdline [] =“ - jar install.jar”;
应该避免这种警告。