C++ преобразование string к LPCTSTR

Рейтинг: 0Ответов: 2Опубликовано: 17.02.2023

Есть следующий код, который преобразовывает 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Принят

Единственное решение которое я нашел - это в настройках конфигурации убрать набор символов Unicode.

▲ 0

Нельзя возвращать что-то локальное из функции...

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;

Только каждый новый вызов такой функции будет делать невалидным старое возвращенное значение.