我正在使用CStrings(控制台应用程序)在win32项目上工作,当我想使用strtok_s
方法将LPSTR
的CString
指针传递给函数(例如GetBuffer()
)时,我注意到了一些奇怪的事情,这是最后一个而不是给我一个LPSTR
,给我一个LPWSTR
(指向宽字符串的指针)... CString
应该存储8位字符,不是吗?
在某些情况下,例如,必须使用CStringA
才能使用Find()
方法,因为使用CString
时,我的输入字符串必须是宽字符串。但是在另一个项目(窗口程序)中,我没有这个问题,我怀疑 header (当我使用afxstr.h“Find”使用普通字符串时,而不是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
模板也有显式实例化:CStringW
和CStringA
。每种类型都有一个转换构造函数,采用一个指向各个其他字符编码的常量指针。换句话说:可以从ANSI(MBCS)字符串构造
CStringW
,也可以从UTF-16LE编码的Unicode字符串构造CStringA
。如果您需要明确说明字符编码,请使用
CStringW
或CStringA
。有关
CString
的完整文档,请访问CStringT Class。