这有什么问题:
wchar_t * t = new wchar_t;
t = "Tony";我想我可以使用wchar_t指针作为字符串...
发布于 2010-06-25 01:36:05
您的代码有两个问题。
首先,"Tony"是指向char字符串的指针,L"Tony"是适当的宽字符串。
其次,您通过wchar_t分配一个新的指针,然后通过将指针重新分配给Tony而立即失去对它的跟踪。这会导致内存泄漏。
发布于 2010-06-25 01:39:39
指针只指向单个值。这事很重要。
您所做的就是为单个wchar_t分配空间,并指向它。然后,您尝试将指针设置为指向字符串(请记住,仅指向第一个字符),但字符串类型不正确。
你得到的是一个char字符串,它“应该”是L"Tony"。但是您在这里所做的一切都是在泄漏您之前的内存分配,因为指针保存了一个新值。
相反,您希望分配足够的空间来容纳整个字符串,然后将字符串复制到分配的内存中。不过,这是一种可怕的做法;永远不要做任何需要显式释放内存的事情。
只需使用std::wstring并继续前进。std::wstring t = L"Tony";。它处理所有的细节,你不需要担心清理任何东西。
发布于 2010-06-25 02:00:04
由于您是一名C#开发人员,因此我将指出c++做的一些不同的事情。
这将分配一个新的wchar_t并将其分配给t
wchar_t* t = new wchar_t这是一个常量字符数组
"Tony" 要获取常量wchar_t数组,请为其添加前缀L
L"Tony"这将t重新设计为指向常量L"Tony“,而不是您的旧wchar_t,并导致内存泄漏,因为您的wchar_t将永远不会被释放。
t = L"Tony"这将创建一个宽字符字符串(wchar_t)来保存L"Tony“的副本
std::wstring t = L"Tony"我想最后一行就是你想要的。如果需要访问wchar_t指针,请使用t.c_str()。注意,c++字符串是可变的,并且在每次赋值时都会被复制。
实现这一点的c方法是:
const wchar_t* t = L"Tony"这不会创建副本,而只是将指针指定为指向常量wchar数组
https://stackoverflow.com/questions/3112407
复制相似问题