【问题标题】:Why I can't construct a wstring from char*为什么我不能从 char* 构造 wstring
【发布时间】:2020-04-16 07:38:15
【问题描述】:

根据我构建的这个代码填充一个char*

char* pathAppData = nullptr;
size_t sz = 0;
_dupenv_s(&pathAppData, &sz, "APPDATA");

我可以很容易地用这个代码和append 这个string 在未来构造一个string

std::string sPathAppData(pathAppData);
sPathAppData.append("\\MyApplication");

但我无法从此代码创建wstring。为什么使用 wstring 这么复杂?我对所有这些类型都快疯了。

std::wstring wPathAppData(pathAppData); // Impossible

【问题讨论】:

    标签: c++ string visual-c++ type-conversion wstring


    【解决方案1】:

    您可以直接使用wchar_t,并使用对应的wchar_t支持的API将数据直接检索到wchar_t,然后构造wstring_dupenv_s 函数有一个广泛的对应物 - _wdupenv_s

    您的代码将如下所示:

    wchar_t* pathAppData = nullptr;
    size_t sz = 0;
    _wdupenv_s(&pathAppData, &sz, L"APPDATA");
    std::wstring wPathAppData(pathAppData);
    wPathAppData.append(L"\\MyApplication")
    

    这可能是一个有趣的阅读:std::wstring VS std::string

    【讨论】:

      【解决方案2】:

      您必须使用迭代器来制作副本。这就是你可以做到的。

      char* pathAppData = nullptr;
      size_t sz = 0;
      _dupenv_s(&pathAppData, &sz, "APPDATA");
      std::string sPathAppData(pathAppData);
      sPathAppData.append("\\MyApplication");
      
      std::wstring wPathAppData(begin(sPathAppData), end(sPathAppData));
      wcout << wPathAppData << endl;
      

      【讨论】:

      • std::wstring wPathAppData(pathAppData, pathAppData + strlen(pathAppData)); 也可以工作,并避免创建临时的std::string。它之所以有效,是因为指针也是迭代器。
      • 感谢您的回答,它有效,但我验证了@Robertas 的回答,因为它更直接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2016-06-01
      • 2011-11-20
      • 1970-01-01
      • 2014-11-01
      • 2019-02-23
      相关资源
      最近更新 更多