首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 宽字符std::wstring的长度和大小问题?sizeof()和length() [已结贴,结贴人:anuosix]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 00:10:10 楼主
        std::wstring ws=L"kkkk";
        int il=ws.length();
        int ia=sizeof(ws);
        int ib=sizeof("dddd");
        int ic=sizeof(L"kkkk");

    输出为
        il=4,ia=32,ib=5,ic=10
    为什么ia=32 ?
    wstring到底对L"kkkk"做了什么?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 01:06:481楼 得分:15
    sizeof是用于获取变量所占内存的大小;wstring作为一个类,除了存储字符串本身,还有虚函数表和其他成员等也是占有内存的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 03:25:382楼 得分:0
    当ws串很大的时候,ia仍然是32,这么说,他存储的是这个类结构的大小,那么这个类是如何存储字符串的呢,雷机构是怎么样的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 07:25:203楼 得分:5
    你直接查看string类的源码不就OK了
    wstring内部保存字符串指针
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 08:49:314楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 09:09:045楼 得分:0
    好像是按照取最长的字符的原则。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 09:28:456楼 得分:0
      一个k是占两个字节的,也就是4个k占8个字节,而它是字符串,是用"\n"结尾的,所以这个串是"kkkk\n",里面每个字符占2个字节,总共5*2=10个字节了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 09:36:177楼 得分:0
    引用 2 楼 anuosix 的回复:
    当ws串很大的时候,ia仍然是32,这么说,他存储的是这个类结构的大小,那么这个类是如何存储字符串的呢,雷机构是怎么样的

    类里面只会保存字符串的指针,所以字符串多大与类对象的大小无关。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 10:54:018楼 得分:0
    好诡异啊,我用win32 application建了个工程,编译结果报错:
    error LNK2001: unresolved external symbol _WinMain@16
    如果改win32 console application建工程,编译结果则报错:
    error LNK2001: unresolved external symbol _Main
    为什么呢??……
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved