关于sizeof的疑问

冬瓜312 2016-10-25 05:10:07
本人初学c++,碰到一个有意思的现象。求大神指导。
我代码中这样写到,主要看sizeof部分,发现数组每一位输出的都是28
const int cnt_s = 6;
string names[cnt_s] = {"wangbo","zhang111111111111111111111111111111aaaaaaaaaaaa111111111111111111111111111111111111111111111111111111111111111113","lisi"};
for (int i = 0; i < cnt_s; i++) {
cout << names[i] << "\t"<< sizeof(names[i])<<endl;
}

我很奇怪,我中间有一个很长的字符串,sizeof的结果居然也是28.
于是我这样尝试
cout << "\t" << sizeof("zhang111111111111111111111111111111aaaaaaaaaaaa111111111111111111111111111111111111111111111111111111111111111113") << endl;
得到的结果却是114.

114这个结果,我是可以理解的,奇怪是,哪位大神能帮我解释下,28是怎么来的吗
...全文
455 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoEdUl 2016-10-31
  • 打赏
  • 举报
回复
碰到一个简单的题,经常还没打字就被瓜分了/
yifuzhiming 2016-10-31
  • 打赏
  • 举报
回复
楼上很多回答都时候正解
赵4老师 2016-10-29
  • 打赏
  • 举报
回复
为什么不参考gcc源代码中sizeof的实现呢?
勤奋的小游侠 2016-10-28
  • 打赏
  • 举报
回复
sizeof是一个操作符,不是函数,操作数在编译时就确定的,不是在运行时才确定的。 sizeof(names[i]) 这个红色的不管是运行时变成了什么,在编译时都是个string类,sizeof只会计算string类的大小。 sizeof("zhang111111111111111111111111111111aaaaaaaaaaaa111111111111111111111111111111111111111111111111111111111111111113") 红色的是常量数组,在编译时会知道它的长度,所以sizeof的结果就是它的长度。
小木 2016-10-28
  • 打赏
  • 举报
回复
sizeof计算的是类型大小
  • 打赏
  • 举报
回复
sizeof()主要是判断类型大小的把 比如 sizeof(int)
begodliker 2016-10-27
  • 打赏
  • 举报
回复
sizeof(names[i]) = sizeof(std::string)
AlbertS 2016-10-25
  • 打赏
  • 举报
回复
sizeof 是获取类型的大小,而不是字符串的长度,求字符串长度的是strlen
paschen 版主 2016-10-25
  • 打赏
  • 举报
回复
sizeof 是获取类型的大小,而不是字符串的长度 string是一个类类型,你获取的只是其类型的大小,而不是其动态分配空间的大小,更不是分配空间上字符串的长度 如果字符串是字符数组 (char[]) ,sizeof得到的是数组的大小,同样也不是字符串的长度
fefe82 2016-10-25
  • 打赏
  • 举报
回复
sizeof 是类的大小。取 std::string 的长度要用它的 size() 或 length() 成员函数。 字符串字面量(string literal)的类型是 char[]。 "zhang111111111111111111111111111111aaaaaaaaaaaa111111111111111111111111111111111111111111111111111111111111111113" 的类型是 char[114] 。sizeof 的结果自然是 114 。
hongwenjun 2016-10-25
  • 打赏
  • 举报
回复
    const int cnt_s = 6;
    string names[cnt_s] = {"wangbo", "zhang111111111111111111111111111111aaaaaaaaaaaa111111111111111111111111111111111111111111111111111111111111111113", "lisi"};
    for (int i = 0; i < cnt_s; i++) {
        cout << names[i] << "\t" << names[i].size() << endl;
    }
hongwenjun 2016-10-25
  • 打赏
  • 举报
回复
string 是个类, 不是使用 sizeof 取大小, GCC和 VC 使用 sizeof获得大小不一样的 string 存储的字符 可以变化的, 你用 str.size() 就可以了

64,639

社区成员

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

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