MFC CString是一个宽字符串

Ami*_*nos 2 c++ string mfc

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

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

通常我会这样做,std::string这就是为什么我迷路了.

IIn*_*ble 10

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;
Run Code Online (Sandbox Code Playgroud)

根据具体TCHAR情况,CString存储ANSI(MBCS)或Unicode字符串.还有CStringT模板的显式实例化:CStringWCStringA.

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

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


CStringT ClassCString提供完整的文档.