弱弱地问一个关于宽窄字节的有关问题
弱弱地问一个关于宽窄字节的问题
我程序是这样写的
编译unicode下结果是这样的:
sizeof(char):1 sizeof(WCHAR):2
char
0032FB90
char
0032FB90
00346410
15
00346470
17
请按任意键继续. . .
多字节编译结果是这样的:
sizeof(char):1 sizeof(WCHAR):2
char
0032FB90
char
0032FB90
00346410
15
00346470
17
请按任意键继续. . .
对于这样的结果,我表示我想不通···· 菜鸟求助。
------解决方案--------------------
在unicode下sizeof的到的值是一个宽字节的指针因此是2
在多字节下他会把宽字节的指针转化为一个char的指阵,因此得到的是1;
------解决方案--------------------
wchar_t要用wcout和wcin
参考下面:
我程序是这样写的
#include <afx.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void main()
{
cout<<"sizeof(char):"<<sizeof(char)
<<" sizeof(WCHAR):"<<sizeof(WCHAR)<<endl;
char a[]="char";
cout<<a<<endl;
WCHAR b[]=L"WCHAR";
cout<<b<<endl;
char *c=new char;
c=a;
cout<<c<<endl;
WCHAR *d=new WCHAR;
d=b;
cout<<d<<endl;
CString e="cstring";
cout<<e<<endl;
cout<<sizeof(e[0])*e.GetLength()+1<<endl;
CString f=L"Lcstring";
cout<<f<<endl;
cout<<sizeof(f[0])*f.GetLength()+1<<endl;
system("pause");
}
编译unicode下结果是这样的:
sizeof(char):1 sizeof(WCHAR):2
char
0032FB90
char
0032FB90
00346410
15
00346470
17
请按任意键继续. . .
多字节编译结果是这样的:
sizeof(char):1 sizeof(WCHAR):2
char
0032FB90
char
0032FB90
00346410
15
00346470
17
请按任意键继续. . .
对于这样的结果,我表示我想不通···· 菜鸟求助。
------解决方案--------------------
在unicode下sizeof的到的值是一个宽字节的指针因此是2
在多字节下他会把宽字节的指针转化为一个char的指阵,因此得到的是1;
------解决方案--------------------
wchar_t要用wcout和wcin
参考下面:
#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
wstring ws1,ws2;
wcin.imbue(locale("chs"));
wcout.imbue(locale("chs"));
getline(wcin,ws1);
getline(wcin,ws2);
if (ws1.size()!=ws2.size()) {
wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
return 1;
}
map<wchar_t,wchar_t> m1,m2;
int n=ws1.size();
for (int i=0;i<n;i++) {
if (m1.find(ws1[i])==m1.end() && m2.find(ws2[i])==m2.end()) {
m1[ws1[i]]=ws2[i];
m2[ws2[i]]=ws1[i];
} else {
if (m1[ws1[i]]!=ws2[i]
------解决方案--------------------
m2[ws2[i]]!=ws1[i]) {
wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
return 1;
}
}
}
wcout<<ws1<<L" 和 "<<ws2<<L" 对应"<<endl;
return 0;
}