char * cstring,char lpctstr
函数GetBuff()可用于转换cs string-tchar *。
函数的原型是lptstr get buffer(intnminbufflength);
CString字符串( CString );
TCHAR* szMsg=新TCHAR[100];
//它的参数是CString字符串的长度
szMsg=str。GetBuffer(字符串。GetLength());
海峡。ReleaseBuffer()。
删除[]szMsg;
szMsg=NULL
TCHAR的转型*- CString
TCHAR斯查尔[18]=L tchar;
CString字符串;
海峡。Format(_T(%s ),szTchar);
一、类型介绍
1.CString:一个动态TCHAR数组。它是一个完全独立的类,封装了“”等运算符和字符串操作方法。换句话说,CString是操纵TCHAR的方法的集合。
2.LPCTSTR:常量的TCHAR指针,定义为
typedef常量TCHAR* LPCTSTR
在…之中
l表示长指针,是Windows 3.1等16位操作系统遗留下来的。在win32和其他32位操作系统中,长指针、近指针和远修饰符都是
这是为了兼容性。没有实际意义。
p表示这是一个指针。
c是一个常数。
T表示Win32环境中有一个_T宏。
STR表示该变量是一个字符串。
2.LPTSTR: Tchar指针,定义为
TCHAR类型定义* LPTSTR
l、p和t的含义同上。
3.Tchar: Tchar实际上是一个宏,定义如下:
#ifdef UNICODE
typedef wchar _ t TCHAR;
#否则
typedef char TCHAR;
#endif
也就是说,如果我们使用unicode编码,那么Tchar指的是wchat_t,如果我们使用ASCII编码,那么Tchar指的是CHAR。这种处理的目的是为了程序的可移植性。T表示在Win32环境下,有一个_T宏。
4.WCHAR: WCHAR实际上是一个宏,意思是wchar_t,一个为了书写方便而重新定义的宏。它的定义是:
typedef wchar_t WCHAR
5.String: String是C中的一个字符串变量,因为操作C类型的char非常麻烦,而且容易内存泄漏,所以C把char封装在C中,其中
包含赋值、删除、添加等常见操作。这些操作不需要考虑内存。可以,用起来更方便。因此,如果可以使用string,尽量使用string,并使用string包含其头文件:
#包含字符串
请注意:
#包含字符串. h
因为string.h是一个C字符串头文件。
string中常用的函数有:
A)=,assign()//赋一个新值
B) swap()//交换两个字符串的内容
C)=,append(),push_back() //在末尾添加字符
D) insert() //插入字符
E) erase() //删除字符
F) clear() //删除所有字符
G) replace() //替换字符
H) //串联字符串
我)==,=,=,=,compare()//比较字符串
J) size(),length()//返回字符数
K) max_size() //返回最大可能字符数
L) empty()//确定字符串是否为空。
M) capacity() //返回重新分配前的字符容量。
N) reserve() //保留一定数量的内存来保存一定数量的字符
O) [],at() //访问单个字符
p),getline() //从流中读取一个值
Q) //将值写入流
R) copy() //给C_string赋值
S) c_str() //以C_string的形式返回内容
T) data() //以字符数组的形式返回内容
U) substr() //返回子字符串
v)搜索功能
W)begin() end() //提供类似STL的迭代器支持。
X) rbegin() rend() //反向迭代器
Y) get_allocator() //返回配置器
6.WCHAR _ T: WCHAR _ T是C中用来表示宽字节的数据类型,也就是unicode编码的数据类型。
7.Char: Char是C中的字符数据类型,属于ASCII编码。
以下是msdn上给出的定义:
01键入MBCS版本中的含义Unicode版本中的含义
02
03WCHARwchar_twchar_t
04LPSTRchar*char*
05LPCSTRconst char*const char*
06LPWSTRwchar _ t *
07 lpcwstr const wchar _ t * const wchar _ t *
08TCHARcharwchar _ t
09LPTSTRTCHAR *
TCHAR*const TCHAR*
二。相互转化
既然定义了这么多数据类型,那么它们之间的相互转换是必不可少的。
答:cstring的转型
1.1的转换。CString和LPCTSTR:
CString和LPCTSTR不需要转换,它们是等价的,所以:
CString字符串( CString );
LPCTSTR pcStr=str
2.2的转化。CString和LPTSTR:
虽然以下传输方法是可行的,但它是不安全的:
CString str( string );
LPTSTR pStr=(LPTSTR)(LPCTSTR)(str);
因为原来转换后的字符串是可以修改的,所以存在安全隐患。
正确的转换方法是:
CString str( string );
LPTSTR pStr=str。get buffer();
海峡。ReleaseBuffer()。
注意:GetBuffer()和ReleaseBuffer()之间不能调用CString函数,比如GetLength()函数。因为对内存的操作无法预测,所以任何CString函数得到的结果都是不确定的。
3.3的转化。CString和WCHAR*(wchar_t*)
方法1:使用wcscpy()函数
CString str( string );
WCHAR pw char[100];
wcscpy(pWchar,str);
方法2:使用wcscpy_s()函数
这个函数是前一个函数的安全版本。调用前面的函数时,如果pWchar内存不足,很容易造成有意义的错误,但wcscpy_s()不会。应该已经指定了它的内存大小:
CString str( string );
WCHAR pw char[100];
wcscpy(pWchar,100,str);
方法3:使用_tcscpy()函数。
CString str( string );
WCHAR pStr[100];
_tcscpy(pStr,str);
方法4:使用_tcscpy_s()函数。
与wcscpy_s()类似,_tcscpy_s()函数是_tcscpy()函数的安全版本:
CString str( string );
WCHAR pStr[100];
_tcscpy_s(pStr,100,str);
4.4的转化。CString和char*
方法1:使用wcstombs()函数
CString str( string );
char pChar[100];
wcstombs(pChar,str,100);
方法2:使用wcstombs_s()函数
如上所述,wcstombs_s()是wcstombs()的安全版本:
总结:
strcpy()、wcscpy()和_tcscpy()是什么关系?实际上,strcpy()处理的是ASCII编码的字符,比如char,而wcscpy()处理的是Unicode编码,而_tcscpy()是一个宏。如果使用ASCII编码,那么_tcscpy()代表strcpy(),如果使用UNICODE编码,_tcscpy()代表wcscpy(),可以通过定义_UNICODE或者UNICODE宏来实现。你可能已经知道为什么要定义这样的宏了吧!只是为了代码的移植。还有一个函数,wcstombs()。这个功能是做什么用的?其实除了Unicode编码,还有一种编码,就是多字节编码,通常是双字节编码,vc支持这种编码。wcstombs()函数用于实现多字节和单字节的转换。