首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wchar_t指针

wchar_t指针
EN

Stack Overflow用户
提问于 2010-06-25 01:33:17
回答 6查看 25K关注 0票数 12

这有什么问题:

代码语言:javascript
复制
wchar_t * t = new wchar_t;

t = "Tony";

我想我可以使用wchar_t指针作为字符串...

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-25 01:36:05

您的代码有两个问题。

首先,"Tony"是指向char字符串的指针,L"Tony"是适当的宽字符串。

其次,您通过wchar_t分配一个新的指针,然后通过将指针重新分配给Tony而立即失去对它的跟踪。这会导致内存泄漏。

票数 27
EN

Stack Overflow用户

发布于 2010-06-25 01:39:39

指针只指向单个值。这事很重要。

您所做的就是为单个wchar_t分配空间,并指向它。然后,您尝试将指针设置为指向字符串(请记住,仅指向第一个字符),但字符串类型不正确。

你得到的是一个char字符串,它“应该”是L"Tony"。但是您在这里所做的一切都是在泄漏您之前的内存分配,因为指针保存了一个新值。

相反,您希望分配足够的空间来容纳整个字符串,然后将字符串复制到分配的内存中。不过,这是一种可怕的做法;永远不要做任何需要显式释放内存的事情。

只需使用std::wstring并继续前进。std::wstring t = L"Tony";。它处理所有的细节,你不需要担心清理任何东西。

票数 12
EN

Stack Overflow用户

发布于 2010-06-25 02:00:04

由于您是一名C#开发人员,因此我将指出c++做的一些不同的事情。

这将分配一个新的wchar_t并将其分配给t

代码语言:javascript
复制
wchar_t* t = new wchar_t

这是一个常量字符数组

代码语言:javascript
复制
"Tony" 

要获取常量wchar_t数组,请为其添加前缀L

代码语言:javascript
复制
L"Tony"

这将t重新设计为指向常量L"Tony“,而不是您的旧wchar_t,并导致内存泄漏,因为您的wchar_t将永远不会被释放。

代码语言:javascript
复制
t = L"Tony"

这将创建一个宽字符字符串(wchar_t)来保存L"Tony“的副本

代码语言:javascript
复制
std::wstring t = L"Tony"

我想最后一行就是你想要的。如果需要访问wchar_t指针,请使用t.c_str()。注意,c++字符串是可变的,并且在每次赋值时都会被复制。

实现这一点的c方法是:

代码语言:javascript
复制
const wchar_t* t = L"Tony"

这不会创建副本,而只是将指针指定为指向常量wchar数组

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

https://stackoverflow.com/questions/3112407

复制
相关文章

相似问题

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