timke212004

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

     http://rabbit8ge.blog.163.com/blog/static/14513082009115112446733/

   字符串操作由于涉及到指针所以很容易出错,VC进行了很多的字符串的封装,这也导致了对一些字符串类的混淆。在网上看到一篇pdf文章,对C++中的字符串及标准进行了总结,可以下载自: http://download.csdn.net/source/373184

    对此,作了些笔记: -

    1.Unicode编码标准一个字符都是16位,其代表类型是wchar_t,而TCHAR类型在采用Unicode方式编译时会使用wchar_t,而普通编译则是char。

    0.在Win16下有长指针(LP)与短指针(P)的区别,在Win32下没有区别,都是32位的。

    1.strlen 如果对LPCTSTR或者LPTSTR等UNICODE的字符串使用的话会得到原来长度的两倍。而应该用wcslen()或者lstrlen()。 lstrlen(LPCTSTR lpString),wcslen(const wchar_t *string),strlen(const char *string)。

    2.VC的字符串可以直接用CString str=“你好”或LPCTSTR str=“你好”。但是Embeded VC则必须用CString str=_T(“你好”)或者LPCTSTR str=“你好”。_T()宏中,括号中只能填写常量,不能填定变量。LPCTSTR在EVC里就是表示UNICODE字符串。

    3.CString是一个动态TCHAR数组,BSTR是专有格式字符串需要用系统提供的函数来操纵。LPCTSTR是一个常量的TCHAR指针。

    4.LPSTR 是一个指向以''结尾的ANSI字符数组指针,与char*可以互换使用。LPCSTR是LPSTR的const常量。LPWSTR与LPCWSTR的字符数据是16位的wchar_t。为了实现两种编码的通用,提出了TCHAR定义。

    如果定义了_UNICODE使用Unicode编译则声明为 typedef wchar_t TCHAR,而如果没有定义_UNICODE使用变通编译则声明为typedef char TCHAR。LPTSTR和LPCTSTR中的T字母表示每个字符都是TCHAR。CString中的字符是TCHAR型的。

posted on 2010-11-01 22:52  timke212004  阅读(253)  评论(0编辑  收藏  举报