C ++ ExpandEnvironmentStrings For User функция иногда возвращает неправильное значение

-1
задан Cuong Huynh 21 February 2019 в 03:50
поделиться

1 ответ

LPCWSTR DesPath = (StringUtil::StrToWstr(setting)).c_str();`

Это создает временный wstring, который выходит из области видимости сразу после назначения DesPath, оставляя DestPath висящим и указывая на недопустимую память. Вам нужно сначала сохранить результат StrToWstr() в локальной переменной wstring, а затем вызывать c_str() для нее, поэтому строковая память остается в области видимости:

wstring wstr = StringUtil::StrToWstr(setting);
LPCWSTR DesPath = wstr.c_str();

В противном случае вызовите StrToWstr().c_str() непосредственно во входном параметре ExpandEnvironmentStringsForUser():

ExpandEnvironmentStringsForUser(hToken, StringUtil::StrToWstr(setting).c_str(), ExpandedDesPath, MAX_PATH - 1);
0
ответ дан Remy Lebeau 21 February 2019 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: