各种字符串定义、操作和转换

char    wchar_t    TCHAR

       TCHAR的定义:

             #ifdef  _UNICODE

                  typedef  wchar_t  TCHAR

             #else

                  typedef  char  TCHAR

            #endif

char *      const char*    wchar_t*    const wchar*

LPSTR    LPCSTR        LPWSTR      LPCWSTR       LPTSTR    LPCTSTR

       LP,表示long point;C,表示const;T,表示TCHAR;至于STR,字面上应该等价于char

       LPTSTR的定义:

            #ifdef _UNICODE

                 typedef  wchar_t*  LPTSTR

            #else

                  typedef  char*  LPTSTR

            #endif

string、CString、char*

1. char*能直接转为string和CString,赋值或构造。

    string 不管是在unicode还是多字节字符集下,都是单字节,数字、字母占一个字节,汉字占2个字节。如果想用宽字符,用std::wstring,也就是UNICODE_string。

    在UNICODE下,CString采用wchar_t,用char*直接赋值、构造,或者用CA2T,CString都会调用一个隐式转换MultiByteToWideChar。但是,不能用CString::Format转换char*,因为会将char*的两个char转为一个wchar_t。

      参考文章:

         http://www.cnblogs.com/eNigMAronG/articles/1588806.html

    strlen不算结尾符“\0”

    sizeof算的是所占空间大小,会算上结尾符"\0"

CString::GetBuffer 与CString::ReleaseBuffer

          LPTSTR CString::GetBuffer(int nMinBufLength);

     GetBuffer的返回值为LPTSTR。当调用GetBuffer并改变CString内容后,一定要调用ReleaseBuffer,这样,CString的大小属性才会改变。

     参考文章:

       http://blog.sina.com.cn/s/blog_4b3c1f950100ksy2.html

UNICODE意识

        LPTSTR ptch = _T("Unicode consciousness");

           CString cstr = _T("Unicode consciousness");

strcpy与memcpy

       复制的内容不同,strcpy只能复制字符串;而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
       复制的方法不同,strcpy不需要指定长度,它遇到字符串结束符"\0"便结束,但有strncpy需要指定长度;memcpy则是根据其第3个参数决定复制的长度。
实现strcpy

           char *strDestCopy = strDest;                                    //保存目标字符串的首地址
           while ((*strDestCopy ++ = *strSrc++)!='\0');            //把 strSrc字符串的内容复制到strDest下
           return strDest;                                                            //返回首地址

实现memcpy

           char *DestCopy = (char *)anyDest;                        //保存首地址     
           while(size-- > 0)                                                       //循环size次,size为传进来的大小,注意自减运算符"--"
                  *DestCopy ++ = *anySrc++ ;
            return anyDest

         参考文章:

             http://apps.hi.baidu.com/share/detail/31972786

L、_T()、TEXT()

           #ifdef UNICODE

           #define   TEXT(s)  L##s

           #else

           #define   TEXT(s)  s

           #endif

         -------------------------

          #ifdef UNICODE

           #define   _T(s)  L##s

           #else

           #define   _T(s)  s

           #endif

        注:## 是宏定义使用的拼接符              

          

typedef与#define

        #define只是简单的字符串替换而typedef则是为一个类型起新名字

        参考文章:

              http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html

#pragma once 与 #ifndef #define #endif

       #pragma once用来防止某个头文件被多次include。#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。  

       #ifndef,#define,#endif用来防止某个宏被多次定义。#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值