ненужные значения в строке LPTSTR

Я написал функцию для возврата расширения из пути. Она выглядит следующим образом:

 LPTSTR GetExtension(LPCTSTR path1)
{
    CString str(path1);
    int length = str.ReverseFind(L'.');
    str = str.Right(str.GetLength()-length);

    LPTSTR extension= str.GetBuffer(0);
    str.ReleaseBuffer();

    return extension;

}

Я проверил оператор и обнаружил, что расширение имеет допустимое значение (.txt) при возврате, но когда я использую следующий оператор в основном методе, как показано ниже

LPTSTR extension = GetExtension(L"C:\\Windows\\text.txt");

Расширение переменной имеет следующие ненужные значения: ﻮ

ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮ䞐瀘嗯᠀骰PꬰP⚜叕u

Может ли кто-нибудь сказать мне, в чем причина этого?


person logeeks    schedule 14.10.2012    source источник


Ответы (2)


Вы возвращаете указатель на освобожденный буфер. И буфер является локальной переменной функции. Оба больших нет-нет. Изменить подпись на

 size_t GetExtension(LPCTSTR path, LPTSTR buffer, size_t bufferSize)

чтобы вы могли скопировать результат в буфер.

Или верните CString или std::wstring, вы используете C++, а не C. Использование TCHAR также является сильно устаревшим способом обработки строк, последняя версия Windows, не поддерживающая Unicode, умерла своевременной смертью 12 лет назад.

person Hans Passant    schedule 14.10.2012

У меня нет с собой моего компилятора, но, возможно, вы, вероятно, получаете буфер и сохраняете его местоположение. Затем вы отпускаете его, пока LPTSTR все еще указывает на одно место.

Или, может быть, LPTSTR находится в стеке, пока вы смотрите на него внутри функции. При выходе из функции вы ее теряете.

person Community    schedule 14.10.2012