如何在 C++ 中将 Cstring 转换为 TCHAR*?
Posted
技术标签:
【中文标题】如何在 C++ 中将 Cstring 转换为 TCHAR*?【英文标题】:How to convert Cstring to TCHAR* in C++? 【发布时间】:2014-06-30 04:18:26 【问题描述】:【问题讨论】:
转换为TCHAR*
通常是不安全的。您确定不想转换为 const TCHAR*
吗?
【参考方案1】:
要从 CString 转换为 TCHAR*,只需使用 GetBuffer 函数 (http://msdn.microsoft.com/en-us/library/aa314880%28v=vs.60%29.aspx)。
请注意,这可以让您将 CStrings 与将字符串作为输出参数返回的 Win32 API 函数一起使用,如下所示。
假设 GetStr 函数具有以下原型。
void GetStr(TCHAR *str, size_t s);
您可以使用 CString 作为第一个参数调用 GetStr,如下所示。
CString str;
GetStr(str.GetBuffer(1024), 1024);
str.ReleaseBuffer();
对 GetBuffer 的调用实际上会分配足够的内存来存储 1024 个字符。
请注意,调用 ReleaseBuffer 至关重要。否则会出现内存泄漏。
【讨论】:
在GetBuffer
之后调用ReleaseBuffer
是强制性的,但不是出于您所说的原因。不会有内存泄漏。但是,CString
对象可能处于不一致的状态,并且结果可能没有很好地定义。函数ReleaseBuffer
并不像它的名字所暗示的那样做;它不会释放任何缓冲区,而是修复CString
对象的内部状态(如字符串长度等)。
@IInspectable 没错,而且(根据 MSDN)如果您已使用 GetBuffer
返回的指针来更改,您只需调用 ReleaseBuffer
字符串内容。一般来说,我更愿意完全远离这种不确定性。以上是关于如何在 C++ 中将 Cstring 转换为 TCHAR*?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中将十六进制字符串转换为 CString?