我正在使用CStrings(控制台应用程序)在win32项目上工作,当我想使用strtok_s方法将LPSTRCString指针传递给函数(例如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模板也有显式实例化:CStringWCStringA

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

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

有关CString的完整文档,请访问CStringT Class

09-11 17:54