C++ преобразование string к LPCTSTR
Есть следующий код, который преобразовывает string в LPCTSTR:
LPCTSTR stringToLPCTSTR(string helpMe)
{
wstring path_wstr(helpMe.begin(), helpMe.end());
return path_wstr.c_str();
}
wcout ничего не выводил. Отладка показала, что в helpMe содержится необходимая строка, а в переменной path_wstr "Ошибка чтения строки". Я пробовал другой вариант преобразования:
LPCTSTR stringToLPCTSTR(string helpMe)
{
CA2T wt (helpMe.c_str());
return wt;
}
Переменная wt, при отладке, показала, что содержит нужную строку, но функция возвращает пустые квадраты.
Посоветуйте, что тут можно сделать или есть ли другой способ преобразования.
Ответы (2 шт):
Нельзя возвращать что-то локальное из функции...
LPCTSTR stringToLPCTSTR(string helpMe)
{
wstring path_wstr(helpMe.begin(), helpMe.end());
return path_wstr.c_str();
}
После возврата указателя строка path_wstr будет уничтожена, и куда указывает этот указатель — неизвестно.
Просто получайте широкую строку, как вы это делаете в функции, и используйте ее c_str(), там, где вам нужен LPCTSTR (если, конечно, у вас действительно Unicode).
Чтобы вернуть указатель — надо динамически выделять память, которую потом надо не забыть удалить. Или, как вариант, использовать
static wstring path_wstr;
Только каждый новый вызов такой функции будет делать невалидным старое возвращенное значение.
Единственное решение которое я нашел - это в настройках конфигурации убрать набор символов Unicode.