zoukankan      html  css  js  c++  java
  • strlen,wcslen,lstrlen,sizeof及wstring

    在Unicode下,lstrlen等同lstrlenW(LPCWSTR lpString),在非Unicode下等同lstrlenA(LPCSTR lpString)。而lstrlenW又等同于wcslen,lstrlenA又等同于strlen,只不过一个是C的标准函数,一个是WinAPI函数。
    #ifdef UNICODE
    #define lstrlen  lstrlenW
    #else
    #define lstrlen  lstrlenA
    #endif
    ----------------------------------------------
    #include "stdafx.h"
    #include "windows.h"
    #include <iostream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
     char str1[]="abcde";
     char str2[]="我是中国人";
     WCHAR str3[]=L"abcde";
     WCHAR str4[]=L"我是中国人";

     cout<<strlen(str1)<<endl;
     cout<<sizeof(str1)<<endl;
     cout<<endl;
    //--------输出结果--------
    //--------5---------------
    //--------6---------------
     cout<<strlen(str2)<<endl;
     cout<<sizeof(str2)<<endl;
     cout<<endl;
    //--------输出结果--------
    //--------10--------------
    //--------11--------------
     cout<<wcslen(str3)<<endl;
     cout<<sizeof(str3)<<endl;
     cout<<endl;
    //--------输出结果--------
    //--------5---------------
    //--------12--------------
     cout<<wcslen(str4)<<endl;
     cout<<sizeof(str4)<<endl;
     cout<<endl;
    //--------输出结果--------
    //--------5---------------
    //--------12--------------
     getchar();
     return 0;
    }

    strlen返回的是字节数(对中英文不一致,中文占两个字节,不包括'/0');
    wcslen返回的是字符数(对中英文一致,不包括'/0');
    sizeof返回的是字节数(包含'/0',而'/0'在Unicode下也是占两个字节的)。
    ---------------------------------------
     WCHAR* sss=L"12345678";
     /*WCHAR szText[15]={''};*/
     WCHAR szText[15]=L"";   //空和是一样的,用他们初始化其长度都是0(初始化结果(0,0,0,0.......))
     WCHAR tt[10];   //没有初始化其长度是大于数组大小的随机值
     CHAR pp[10];    //
     int len=wcslen(sss);      //8
     int len2=wcslen(szText);  //0
     int len3=wcslen(tt);      //随机14
     int len4=strlen(pp);      //随机48
     wcsncpy_s(szText,len+1,sss,len);   //wcsncpy_s第2个参数是缓冲区元素个数,+1是末尾,其值不小于第4个参数+1即可
      
     //szText[8...14]都是0
    ---------------------------------------
    wstring是宽char,Unicode编码,一般情况下一个字符占两个字节大小
    string是窄char,AscII编码,一个字符占一个字节大小
    ---------------------------------------

    WCHAR==wchar_t,    CHAR=char;    
    TCHAR根据编译条件不同而不同(是否支持UNICODE,若定义了UNICODE,就等于WCHAR,否则CHAR)

    //wstring转换成wchar_t
    wstring wstr=L"我的中国心";
    wchar_t* cstr;
    cstr=const_cast<wchar_t*>(wstr.c_str()); 
    //wchar_t转换成wstring
    可以直接赋值

  • 相关阅读:
    【springboot】@Valid参数校验
    【springboot】事务处理
    【springboot】过滤器、监听器、拦截器,Aspect切片
    【java web】过滤器、拦截器、监听器的区别
    【java web】监听器listener
    【java web】拦截器inteceptor
    【java web】过滤器filter
    【权限管理】Apache Shiro和Spring Security的对比
    【面试题】挑战10个最难回答的Java面试题(附答案)
    【面试题】反向面试
  • 原文地址:https://www.cnblogs.com/yangjj08/p/10153672.html
Copyright © 2011-2022 走看看