c++ - MFC CString 是宽字符字符串吗

标签 c++ string mfc

我正在使用 CStrings(控制台应用程序)开发一个 win32 项目,当我想将 LPSTR< 传递给函数(例如 strtok_s)时,我注意到了一些奇怪的事情 来自 CString 的指针,方法是 GetBuffer(),最后一个不是给我一个 LPSTR,而是给了我一个 LPWSTR(指向宽字符串的指针)... CString 应该存储 8 位字符,不是吗?

我不得不在某些情况下使用 CStringA 例如能够使用方法 Find() 因为使用 CString 我的输入字符串必须是一个宽字符串。但是在其他另一个项目(窗口程序)中,我没有这个问题,我怀疑标题(当我使用 afxstr.h 时“查找”适用于普通字符串,但不适用于 afxcoll.h ...)

通常我使用 std::string 这就是我迷路的原因。

最佳答案

CString 是一个 typdef,声明为 (afxstr.h):

typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
// Or, when using the MFC DLL
typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;

根据 TCHAR 是什么,CString 存储 ANSI (MBCS) 或 Unicode 字符串。还有 CStringT 模板的显式实例化:CStringWCStringA

这两种类型都有一个转换构造函数,采用指向相应其他字符编码的常量指针。换句话说:您可以从 ANSI (MBCS) 字符串构造 CStringW,以及从 UTF-16LE 编码的 Unicode 字符串构造 CStringA

如果您需要明确说明字符编码,请使用 CStringWCStringA


CString 的完整文档可在 CStringT Class 获得。 .

关于c++ - MFC CString 是宽字符字符串吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305603/

相关文章:

c++ - 调用 end() 时出现 std::multimap 错误

python - 以稳健的方式解析带有转义字符的分隔字符串

c++ - 将可见窗口标题添加到组合框 MFC

c++ - 如何在存在 2 个网卡的情况下为 UDP 多播设置套接字?

c++ - 如何比较两个字符串?

c - C 中分割字符串最快的算法?

c++ - 在没有 Visual Studio 的情况下使用 MFC 和 ATL 库

c++ - 删除 CPropertySheet/Tabbed Dialog 页面下方的间隙

c++ - Qt QWebEngineView 不允许加载本地资源

c++ - 如何将二维数组传递给函数 (C++)?