首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LPTSTR字符串中的垃圾值

LPTSTR字符串中的垃圾值
EN

Stack Overflow用户
提问于 2012-10-14 09:11:40
回答 2查看 249关注 0票数 0

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

代码语言:javascript
复制
 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方法中使用以下语句时,如下所示

代码语言:javascript
复制
LPTSTR extension = GetExtension(L"C:\\Windows\\text.txt");

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

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

有人能告诉我这背后的原因吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-14 11:41:06

您将返回一个指向已释放缓冲区的指针。缓冲区是函数的局部变量。两个大的都不行。将签名更改为

代码语言:javascript
复制
 size_t GetExtension(LPCTSTR path, LPTSTR buffer, size_t bufferSize)

以便您可以将结果复制到缓冲区中。

或者返回一个CString或std::wstring,您使用的是C++,而不是C。使用TCHAR也是一种严重过时的处理字符串的方法,最后一个非Unicode版本的Windows在12年前就去世了。

票数 1
EN

Stack Overflow用户

发布于 2012-10-14 09:20:17

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12880793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档