MFC CString 是宽字符字符串吗
Is MFC CString a wide char string
我正在使用 CStrings(控制台应用程序)开发一个 win32 项目,当我想传递给一个函数(例如 strtok_s
)一个 LPSTR
指针时,我注意到了一些奇怪的事情来自 CString
和方法 GetBuffer()
,最后一个没有给我一个 LPSTR
,而是给了我一个 LPWSTR
(指向宽字符串的指针)... CString
应该存储 8 位字符,不是吗?
我不得不在某些情况下使用 CStringA
例如能够使用方法 Find()
因为使用 CString
我的输入字符串必须是一个宽一。但是在其他另一个项目(窗口程序)中,我没有这个问题,我怀疑 headers (当我使用 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 获得。
我正在使用 CStrings(控制台应用程序)开发一个 win32 项目,当我想传递给一个函数(例如 strtok_s
)一个 LPSTR
指针时,我注意到了一些奇怪的事情来自 CString
和方法 GetBuffer()
,最后一个没有给我一个 LPSTR
,而是给了我一个 LPWSTR
(指向宽字符串的指针)... CString
应该存储 8 位字符,不是吗?
我不得不在某些情况下使用 CStringA
例如能够使用方法 Find()
因为使用 CString
我的输入字符串必须是一个宽一。但是在其他另一个项目(窗口程序)中,我没有这个问题,我怀疑 headers (当我使用 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 获得。