我正在使用 CStrings(控制台应用程序)开发一个 win32 项目,当我想将 LPSTR< 传递给函数(例如
来自 strtok_s
)时,我注意到了一些奇怪的事情CString
的指针,方法是 GetBuffer()
,最后一个不是给我一个 LPSTR
,而是给了我一个 LPWSTR
(指向宽字符串的指针)... CString
应该存储 8 位字符,不是吗?
我不得不在某些情况下使用 CStringA
例如能够使用方法 Find()
因为使用 CString
我的输入字符串必须是一个宽字符串。但是在其他另一个项目(窗口程序)中,我没有这个问题,我怀疑标题(当我使用 afxstr.h 时“查找”适用于普通字符串,但不适用于 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 获得。 .
关于c++ - MFC CString 是宽字符字符串吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305603/