visual-c++ - VC++ : how-to convert CString to TCHAR*

标签 visual-c++ mfc

VC++:如何将 CString 值转换为 TCHAR*。一个方法是 GetBuffer(..) 函数。有没有其他方法可以将 CString 转换为 TCHAR*。

最佳答案

CString::GetBuffer() 不进行任何转换,它提供对字符串的直接访问。

要复制CString:

TCHAR* buf = _tcsdup(str);
free(buf);

TCHAR* buf = new TCHAR[str.GetLength() + 1];
_tcscpy_s(buf, str.GetLength() + 1, str);
delete[]buf;

但是上面的代码通常没有用。您可能想像这样修改它:

TCHAR buf[300];
_tcscpy_s(buf, TEXT("text"));

通常您需要将数据读入缓冲区,因此您希望缓冲区大小大于当前大小。

或者您可以只使用CString::GetBuffer(),您可能还想增大缓冲区大小。

GetWindowText(hwnd, str.GetBuffer(300), 300);
str.ReleaseBuffer(); //release immediately
TRACE(TEXT("%s\n"), str);

在其他情况下,您只需要 const cast const TCHAR* cstr = str;

最后,TCHAR 并不是很有用。如果您的代码与 ANSI 和 unicode 兼容,那么您不妨将其设为仅 unicode。但这只是一个建议。

关于visual-c++ - VC++ : how-to convert CString to TCHAR*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429976/

相关文章:

c++ - 是否可以在不对抽象的父类中的函数使用 virtual 关键字的情况下覆盖 C++ 子类中的函数?

C++ 线程安全 - 在 worker 和 controller 之间交换数据

c++ - 获取流程所有者 (Citrix/Provisioning)

c++ - 我们应该用什么来代替 DCOM 通信?

c++ - 如何使用 curl 请求发送数据

c++ - 无限数量的复选框

c++ - 压缩通过套接字发送的数据数组

c++ - MFC SDI 从 INI 读取并在更改属性时更新 View 字符串

c++ - afxdb.h 错误?

c++ - 你能在 C++ 中隐藏虚方法吗?