首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数返回LPCWSTR?

从函数返回LPCWSTR?
EN

Stack Overflow用户
提问于 2010-12-08 01:32:34
回答 6查看 2.7K关注 0票数 5

为了将一个整数值传递给SetWindowTextW() (我在Visual Studio2010的C++中使用unicode构建),这个函数返回一个LPCWSTR就足够了吗?我很确定这里有一些我不理解的东西,因为它返回一个奇怪的值。我知道LPCWSTR是一个以null结尾的长指针宽字符串,但我仍然认为我遗漏了一些东西!

代码语言:javascript
复制
const LPCWSTR int2LPCWSTR ( int integer )
{
 wstringstream wss;
 wss << integer;
 const wstring& wstr = wss.str();
 const LPCWSTR p = wstr.c_str();
 return p;
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-08 01:36:26

从函数返回LPCWSTR本身并没有什么问题。但是,出现的一般问题是围绕返回值的内存管理。LPCWSTR通常保存在分配的内存中,因此需要在调用者和被调用者之间了解该内存的所有权。

我不想针对您的示例,但它是一个很好的例子,说明了返回LPCWSTR可能会出现什么问题。字符串的内存由函数本地的wss实例持有。一旦函数返回,内存就会在wss的析构函数中被释放,从而使返回值无效。

如果您已经在使用C++,我的建议是直接返回std::stringwstring,以消除关于谁拥有分配的内存的困惑。

代码语言:javascript
复制
wstring int2LPCWSTR ( int integer )
{
 wstringstream wss;
 wss << integer;
 return wss.str();
}

或者,如果需要复制值,则通过引用返回该值。

代码语言:javascript
复制
void int2LPCWSTR ( int integer, wstring& value )
{
 wstringstream wss;
 wss << integer;
 value = wss.str();
}
票数 9
EN

Stack Overflow用户

发布于 2010-12-08 01:36:25

你不能这么做。

返回wstring,然后使用c_str()获取LPCWSTR并将其传递给SetWindowTextW

票数 2
EN

Stack Overflow用户

发布于 2010-12-08 01:35:29

wstr拥有.c_str()的返回值。当wstr在函数末尾被析构时,p将成为无效指针。

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

https://stackoverflow.com/questions/4379696

复制
相关文章

相似问题

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