C++:已弃用从字符串常量到 'LPSTR {aka char*}' [-Wwrite-strings] 的转换 - 警告。如何避免?
C++: deprecated conversion from string constant to 'LPSTR {aka char*}' [-Wwrite-strings] - warning. How to avoid?
在编译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";
应避免此警告。
相关文章:
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 如何正确将"strings"转换为"double"?
- 将错误作为从字符串常量到"char*"的已弃用转换 [-Wwrite-strings]
- 有没有办法初始化混合字符和"strings"数组
- 警告:ISO C++禁止将字符串常量转换为'char*' [-Wwrite-strings]
- 功能采用variadic模板包将std :: strings转换为const char *
- 一个接受Strings和Ints的变元函数,格式化后者并连接所有Ints
- Borland C++Builder 6 Strings操作太慢
- 在相同的代码中使用C-strings和STD :: String
- C 警告:从字符串常数到“ char*” [-wwrite-strings]的弃用转换
- 无法获得通过C++警告:(和崩溃后)已弃用从字符串常量到"char*"的转换 [-Wwrite-strings]
- 如何在 C# 中使用 Swig 包装 UTF-8 编码C++ std::strings
- c++ to VB.Net IntPtr Strings
- 即使有C++11/14,给出的答案仍然是"Why switch statement cannot be applied on strings?"真的吗?
- 将"a set strings"和"input from QLineEdit"串联成 QString
- vcclr.h中存在的PtrToStringChars(Strings)函数的C#等价项
- 不赞成从字符串常量转换为“char*”[-Wwrite strings]
- 如何在 std::vector 中查找重复项<strings>并返回一个 std::list 它们按字母顺序排序,在该结果列表中没有重复项
- Formatting C-strings
- C++:已弃用从字符串常量到 'LPSTR {aka char*}' [-Wwrite-strings] 的转换 - 警告。如何避免?