Почему я не могу построить wstring из char * - PullRequest
0 голосов
/ 16 апреля 2020

В соответствии с этим, я строю заполнение char* из этого кода:

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

Я могу легко построить string с этим кодом и append это string в будущем:

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

Но я не могу создать wstring из этого кода. Почему так сложно работать с wstring? Я схожу с ума от всех типов тезисов.

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

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы можете использовать 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

1 голос
/ 16 апреля 2020

Вы должны использовать итератор, чтобы сделать копию. Вот как вы можете это сделать.

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;
...