问一下这里为什么长度乘以2呀?memset(szUtf8,0,len * 2 + 2);
来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/06/17 06:02:58
问一下这里为什么长度乘以2呀?memset(szUtf8,0,len * 2 + 2);
Unicode到UTF8转换
char* UnicodeToUtf8(CString unicode)
{
int len;
len = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)unicode,-1,NULL,0,NULL,NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8,0,len * 2 + 2);
WideCharToMultiByte (CP_UTF8,0,(LPCWSTR)unicode,-1,szUtf8,len,NULL,NULL);
return wszUtf8;
}
Unicode到UTF8转换
char* UnicodeToUtf8(CString unicode)
{
int len;
len = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)unicode,-1,NULL,0,NULL,NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8,0,len * 2 + 2);
WideCharToMultiByte (CP_UTF8,0,(LPCWSTR)unicode,-1,szUtf8,len,NULL,NULL);
return wszUtf8;
}
我觉得你这个程序本身可能存在问题.
char *szUtf8=new char[len + 1]; //这个申请的是len+1个char的内存变量
memset(szUtf8,0,len * 2 + 2);//这里要操作的内存空间为 (len+1)*2个的char空间,这个肯定是内存溢出,程序出现未知异常.
我在网上看到过相关的例程,给你参考下
void ConvertGBKToUtf8(char* rtnBuffer,const char* strGBK)
{
int len=MultiByteToWideChar(CP_ACP,0,(LPCTSTR)strGBK,-1,NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1]; //他这里很明白,空间足够
memset(wszUtf8,0,len * 2 + 2);//对这个来说
MultiByteToWideChar(CP_ACP,0,(LPCTSTR)strGBK,-1,(LPWSTR)wszUtf8,len);
len = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wszUtf8,-1,NULL,0,NULL,NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8,0,len + 1);
WideCharToMultiByte (CP_UTF8,0,(LPCWSTR)wszUtf8,-1,szUtf8,len,NULL,NULL);
strcpy(rtnBuffer,szUtf8);
delete[] szUtf8;
delete[] wszUtf8;
}
char *szUtf8=new char[len + 1]; //这个申请的是len+1个char的内存变量
memset(szUtf8,0,len * 2 + 2);//这里要操作的内存空间为 (len+1)*2个的char空间,这个肯定是内存溢出,程序出现未知异常.
我在网上看到过相关的例程,给你参考下
void ConvertGBKToUtf8(char* rtnBuffer,const char* strGBK)
{
int len=MultiByteToWideChar(CP_ACP,0,(LPCTSTR)strGBK,-1,NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1]; //他这里很明白,空间足够
memset(wszUtf8,0,len * 2 + 2);//对这个来说
MultiByteToWideChar(CP_ACP,0,(LPCTSTR)strGBK,-1,(LPWSTR)wszUtf8,len);
len = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wszUtf8,-1,NULL,0,NULL,NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8,0,len + 1);
WideCharToMultiByte (CP_UTF8,0,(LPCWSTR)wszUtf8,-1,szUtf8,len,NULL,NULL);
strcpy(rtnBuffer,szUtf8);
delete[] szUtf8;
delete[] wszUtf8;
}
LEN(STR(123.456,10,2))为什么这个答案是10?
len函数:len(B2)=18*2什么意思
问一下8乘以多少加多少乘以5等于260?6乘以多少减2乘以多少等于4.
1Dim var2='ABC'为什么不对 2执行语句s=Len(Mid("VisualBa
VFP中,LEN(SPACE(3)-SPACE(2))的输出是什么?为什么啊
=TEXT(--(19*(LEN(N4)=15)&MID(N4,7,6+(LEN(N4)=18)*2)),"####-#
加密区箍筋根数=(加密长度/加密间距+1)*2,为什么要乘以2呢?
公式寻答=TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),"0000-0
memset(arr,0,20*30*4)
5乘以5等于0乘以1乘以100加25.15乘以15等于1乘以2乘以100加25.第n个算式表示为什么
=SUMPRODUCT(--(0&LEFT(A4:C4,2*LEN(A4:C4)-LENB(A4:C4))))求解释
=DATEDIF(TEXT(MID(F5,7,LEN(F5)/2-1),"0-00-00"),TODAY(),"Y")