我正在使用CStrings(控制台应用程序)处理win32项目,当我想传递给一个函数(例如strtok_s
)LPSTR
指针时,我注意到了一些奇怪的事情来自CString
方法GetBuffer()
,最后一个而不是给我一个LPSTR
,它给了我一个LPWSTR
(一个指向宽字符串的指针)...... CString
应该存储8位字符不是吗?
我在某些情况下有义务使用CStringA
例如使用方法Find()
,因为CString
我的输入字符串必须宽一。但是在另一个项目(窗口程序)中,我没有遇到这个问题,我怀疑标题(当我使用afxstr.h" Find"使用正常的字符串,但是不是用afxcoll.h ...)
通常我会与std::string
合作,这就是我迷失的原因。
答案 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
模板的明确实例:CStringW
和CStringA
。
任何一种类型都有一个转换构造函数,带有一个指向相应其他字符编码的常量指针。换句话说:您可以从ANSI(MBCS)字符串构造CStringW
,以及从UTF-16LE编码的Unicode字符串构造CStringA
。
如果您需要明确说明字符编码,请使用CStringW
或CStringA
。
CString
的完整文档位于CStringT Class。