如何在 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*?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将 long 转换为 CString

如何在 Swift 中将十六进制字符串转换为 CString?

如何在 C++ 中将数字转换为字符串,反之亦然

如何在 C++ 中将指针转换/转换为引用

如何在 MFC C++ 中将 CString 值列表添加到 ComboBox 中? [关闭]

如何在 C++ 中将毫秒时间转换为 FILETIME