LPTSTR 及字符串相关

LPTSTR解释  与char*等价,表示普通字符/字符串变量,指向字符/字符串的指针。

  LP:长指针(long pointer)。

  T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。

  STR:表示这个变量是一个字符串。

  /* LPTSTR 转换成 CString */

  (1)直接赋值

  CString strText;

  LPTSTR lpszText = _T("LPTSTR >> CString");

  strText = lpszText;

  ::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

  (2)CString::Format()格式化

  CString strText;

  LPTSTR lpszText = _T("LPTSTR >> CString");

  strText.Format( _T("%s"), lpszText );

  ::MessageBox( NULL, strText , _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

  /* CString 转换成 LPTSTR */

  (1)强制转换

  CString strText( _T("This is a test") );

  LPTSTR lpszText =(LPTSTR)(LPCTSTR)strText;

  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

  (2)使用lstrcpy()

  CString strText( "This is a test" );

  LPTSTR lpszText = new TCHAR[strText.GetLength()+1];

  lstrcpy( lpszText, strText );

  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

  (3)使用CString::GetBuffer()

  CString strText(_T("This is a test "));

  LPTSTR lpszText = strText.GetBuffer();

  strText.ReleaseBuffer();

  ::MessageBox( NULL, lpszText, _T("标题"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

  /* char * 转换成 CString

  char chArray[] = "This is a test";

  char * p = "This is a test";

  CString theString = chArray;

  theString.Format(_T("%s"), chArray);

  theString = p;

  /* CString转换成char*

  1.

  CString theString( "This is a test" );

  LPTSTR lpsz = new TCHAR[theString.GetLength()+1];

  _tcscpy(lpsz, theString);

  2.

  CString s(_T("Char test "));

  LPTSTR p = s.GetBuffer(); [1]

  LPTSTR dot = strchr(p, ''.'');

  // 在这里添加使用p的代码

  if(p != NULL)

  *p = _T('');

  s.ReleaseBuffer();

编辑本段关于c++中LPTSTR

  LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t区别

  L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。

  P表示这是一个指针。

  T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。

  STR表示这个变量是一个字符串。

  C表示是一个常量,const。

  LPTSTR:

  如果定义了UNICODE宏则LPTSTR被定义为LPWSTR。typedef LPTSTR LPWSTR;

  否则LPTSTR被定义为LPSTR。 typedef LPTSTR LPSTR;

  下面列出一些常用的typedefs:

  类型 MBCS Unicode

  WCHAR wchar_t wchar_t

  LPSTR char* char*

  LPCSTR const char* const char*

  LPWSTR wchar_t* wchar_t*

  LPCWSTR const wchar_t* const wchar_t*

  TCHAR char wchar_t

  LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)

  LPCTSTR const TCHAR* const TCHAR*

  由于Win32 API文档的函数列表使用函数的常用名字(例如, SetWindowText"),所有的字符串都是用TCHAR来定义的。(除了XP中引入的只适用于Unicode的API)。所以结论,在VS2005系统中,为提高可移植性,定义字符串时用TCHAR,转化为UNICODE时用_T而不用L。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值