MFC CString是一个宽字符串

时间:2015-10-23 15:04:08

标签: c++ string mfc

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

我在某些情况下有义务使用CStringA例如使用方法Find(),因为CString我的输入字符串必须宽一。但是在另一个项目(窗口程序)中,我没有遇到这个问题,我怀疑标题(当我使用afxstr.h" Find"使用正常的字符串,但是不是用afxcoll.h ...)

通常我会与std::string合作,这就是我迷失的原因。

1 个答案:

答案 0 :(得分: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;

根据TCHAR的不同,CString存储ANSI(MBCS)或Unicode字符串。还有CStringT模板的明确实例:CStringWCStringA

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

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


CString的完整文档位于CStringT Class

相关问题