我正在使用CStrings(控制台应用程序)开发一个win32项目,当我想传递一个函数(strtok_s
例如)LPSTR
一个CString
带有方法的指针时,我注意到一些奇怪的东西GetBuffer()
,最后一个而不是给我一个LPSTR
,它给了我一个LPWSTR
(指向一个宽字符串的指针)... CString
应该存储8位字符不是吗?
在某些情况下,我不得不使用CStringA
例如能够使用该方法,Find()
因为CString
我的输入字符串必须是宽字符串.但在另一个项目(窗口程序)中,我没有这个问题,我怀疑标题(当我使用afxstr.h时"查找"使用普通字符串,但不能使用afxcoll.h ......)
通常我会这样做,std::string
这就是为什么我迷路了.
IIn*_*ble 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;
Run Code Online (Sandbox Code Playgroud)
根据具体TCHAR
情况,CString
存储ANSI(MBCS)或Unicode字符串.还有CStringT
模板的显式实例化:CStringW
和CStringA
.
这两种类型都有一个转换构造函数,带有一个指向相应其他字符编码的常量指针.换句话说:您可以CStringW
从ANSI(MBCS)字符串构造一个,也可以CStringA
从UTF-16LE编码的Unicode字符串构造一个.
如果您需要明确说明字符编码,请使用CStringW
或CStringA
.
CString
提供完整的文档.
归档时间: |
|
查看次数: |
1157 次 |
最近记录: |