LPCTSTR、LPTSTR、_T和CString几种类型的区别
首先要说的是_T不是类型,是一种宏!
_T是提供给开发者方便的编写在Unicode、MBCS、ANSI等环境下 都适用的宏,编译器自然会解释它,我们只要每个字符串都用上 它就不用管了。
在 UNICODE定义的工程里,_T("this string") 被解释为L"this string" 。其他工程里被解释为"this string"
LPCTSTR、LPTSTR和CString主要是应用场合不同:
,需要对字符串作复杂处理,用CString合适;
,函数参数需要调用某字符串值而不需改变它,用LPCTSTR合适; 例如定义函数 OpenMyFile(LPCTSTR FileName) ,函数参数需要调用某字符串值而在函数中可能改变,用&CString; 例如定义函数 GetMyName(CString &strMyName) ,函数参数需要调用某指向字符串的非常数指针,用LPTSTR和 CString的GetBuffer合适。例如函数 DoSomeThing(char *pSome),
调用时可以用
CString Str1(_T"asdfasdf"); //可以用Str1作些查、替换的活 LPTSTR pMyVal=Str1.GetBuffer(-1); DoSomeThing(pMyVal);
Str1.ReleaseBuffer();
用下面这个函数可以看看几种类型的使用。有些东西例如暂时变量释放引 起指针指向值的变化、字符串空间申请与释放还得啃MSDN
CString ChangeStr(LPCTSTR pcstr, LPTSTR pstr,CString str,CString &str_ref)
{
CString tempstr;
tempstr=pcstr; pcstr=_T("asdf"); tempstr=pstr; pstr=_T("asdf"); tempstr=str; str=_T("asdf"); tempstr=str_ref; str_ref=_T("asdf"); return tempstr;
}
void teststr()
{
LPCTSTR pcStr=_T("generic data1"); LPTSTR pStr=_T("generic data2"); CString Str=_T("generic data3"); CString Str1=_T("generic data4"); CString Str2;
pcStr=_T("generic data01");
pStr=_T("generic data02");
Str=_T("generic data03");
Str2=ChangeStr(pcStr,pStr,Str,Str1); pcStr=Str;
pStr=Str.GetBuffer();
}
举个例子:CString="me"和 CString =_T("me")
非UNICODE 下,等价.
UNICODE 下,不.
_T 是宏, 它的存在是为了方便 ANSI 和 UNICODE 字符间的转换
LPCTSTR 是 const 类型
unicode字符的种类有CString 操作方便
补充:
Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字 的情况。而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T( "Hello ")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程 序为UNICODE方式,则编译器会把 "Hello "字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以以 UNICODE方式保存。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论