【问题标题】:deprecated_string_conv_gen: conversion from a string literal to pointer-to-character (non-const) is deprecated in C++deprecated_string_conv_gen:从字符串文字到指针到字符(非常量)的转换在 C++ 中已弃用
【发布时间】:2019-09-04 16:43:35
【问题描述】:

通过覆盖工具,我在 C++ 代码中收到以下警告消息:

deprecated_string_conv_gen:不推荐从字符串文字到指针到字符(非常量)的转换

在下面一行:

si.lpDesktop = L"winsta0\default";

谁能帮我解决这个警告信息?

下面是完整的sn-p代码:

LONG RcRegJob::CreateProcessandExit()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    WCHAR pwszMcSvrCntPath[MAX_PATH];
    DWORD dwExitCode = 0;
    dwExitCode = ::GetModuleFileName(NULL, pwszMcSvrCntPath, MAX_PATH);

    if (dwExitCode)
    {
        std::wstring strFilePath = pwszMcSvrCntPath;
        std::wstring strProcessName;
        int npos = strFilePath.rfind(L"\\");

        strProcessName = strFilePath.substr(npos + 1, strFilePath.length());
        strFilePath = strFilePath.substr(0, npos);

        ::ZeroMemory(&si, sizeof(si));
        ::ZeroMemory(&pi, sizeof(pi));

        si.cb = sizeof(si);
        si.lpDesktop = L"winsta0\\default";

        {
            dwExitCode = ::CreateProcess(0, (LPWSTR)strProcessName.c_str(),
                0, 0, FALSE, NORMAL_PRIORITY_CLASS, 0,
                strFilePavth, &si, &pi);
        }

        if (0 == dwExitCode)
        {
            dwExitCode = ::GetLastError(); 
        }
        else
        {
            exit(0);
        }
    }

    return dwExitCode;
}

声明:

LPWSTR  lpDesktop;

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    C++ 中的字符串文字具有常量字符数组的类型。因此,指向字符串字面量的指针应具有限定符 const,即它们应指向常量对象。

    然而这个数据成员

    LPWSTR  lpDesktop;
    

    确实有限定符const

    数据成员应该像这样声明

    LPCWSTR  lpDesktop;
    

    为避免该错误,您可以声明一个非常量数组并使用字符串文字 L"winsta0\\default" 对其进行初始化,然后将指针设置为指向该数组。

    【讨论】:

    • 所以指向字符串字面量的指针应该有限定符 const。 读起来就像你需要type * const,而不是type const *,这是需要的。
    • 感谢您的意见。根据您的输入,我将 L"winsta0\\default" 更改为 wchar_t *pwdefault = L"winsta0\\default"; si.lpDesktop = pwdefault;
    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多