char - cstring,char lpctstr

  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()函数用于实现多字节和单字节的转换。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: