LPTSTR字符串中的垃圾值

时间:2012-10-14 09:11:40

标签: visual-c++

我编写了一个函数来从路径返回扩展名,如下所示:

 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)但是当我在main方法中使用下面的语句时如下所示

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

变量扩展名具有以下垃圾值: و

  

وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو䞐泸嗯᠀骰PꬰP⚜叕Ú

谁能告诉我背后的原因是什么?

2 个答案:

答案 0 :(得分:1)

您正在返回指向已释放缓冲区的指针。 缓冲区是函数的局部变量。两个都没有。将签名更改为

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

这样您就可以将结果复制到 buffer 中。

或者返回CString或std :: wstring,你使用的是C ++,而不是C.使用TCHAR也是处理字符串的一种严重过时的方式,最后一个非Unicode版本的Windows在12年前及时死亡。

答案 1 :(得分:0)

我没有我的编译器,但可能你可能正在获取缓冲区并存储它的位置。然后在LPTSTR仍然指向一个位置时释放它。

或者当你在函数内部查看它时,LPTSTR可能在堆栈中。在退出该功能时,您将失去它。