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
可以直接赋值

原文地址:https://www.cnblogs.com/yangjj08/p/10153672.html