弱弱地问一个关于宽窄字节的问题

charlessyk 2014-05-13 09:49:11
我程序是这样写的
#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
请按任意键继续. . .

对于这样的结果,我表示我想不通···· 菜鸟求助。
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-05-14
  • 打赏
  • 举报
回复
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;
}
  • 打赏
  • 举报
回复
引用 2 楼 u012899544 的回复:
?? 还是发错了 多字节编译结果: sizeof(char):1 sizeof(WCHAR):2 char 0022FB58 char 0022FB58 cstring 8 Lcstring 9 请按任意键继续. . .
在unicode下sizeof的到的值是一个宽字节的指针因此是2 在多字节下他会把宽字节的指针转化为一个char的指阵,因此得到的是1;
charlessyk 2014-05-13
  • 打赏
  • 举报
回复
?? 还是发错了 多字节编译结果: sizeof(char):1 sizeof(WCHAR):2 char 0022FB58 char 0022FB58 cstring 8 Lcstring 9 请按任意键继续. . .
charlessyk 2014-05-13
  • 打赏
  • 举报
回复
前面错了 ,多字节编译结果是这样的: sizeof(char):1 sizeof(WCHAR):2 char 0032FB90 char 0032FB90 00346410 15 00346470 17 请按任意键继续. . .

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧