帮我看下那个32是怎么来的,我给忘了,hello不是5个字符吗?应该是5啊。
c++ string sizeof的问题。
答案:3 悬赏:60
解决时间 2021-03-22 04:06
- 提问者网友:伪情浪人
- 2021-03-21 17:15
最佳答案
- 二级知识专家网友:浪女动了心
- 2021-03-21 17:50
C++的string和C语言的字符串数组是有区别的,C风格的字符串数组的大小被限定在定义时的长度上,而C++标准库中的string类的对象在创建时会保留额外的内存空间,以便于用户调用append成员函数或者给string对象重新赋值时不会发生越界行为。在你的编译器的情况下保留的空间是32字节,这可以保证string对象的值为长为31及以下字符串时不用重新分配内存,加快string对象的运行时效率。其实C++标准库的许多类或类模板用了类似的保留内存技术,比如std::vector<>保留了特定的内存,std::function<>保留了24字节的内存。
所以说,即使string对象含有5个字符,其内存大小绝不是sizeof(char)*6(不是5)。
有一个问题需要纠正,"hello"大小为6,你忘了算'\0'字符串结尾字符也是字符串一部分
所以说,即使string对象含有5个字符,其内存大小绝不是sizeof(char)*6(不是5)。
有一个问题需要纠正,"hello"大小为6,你忘了算'\0'字符串结尾字符也是字符串一部分
全部回答
- 1楼网友:一池湖水
- 2021-03-21 19:52
string是类,其中32是这个类的大小,你所说的5指的值string这个类指向的字符串的长度
- 2楼网友:风格单纯
- 2021-03-21 19:18
对 string 求 sizeof 没有意义。
要获得字符串长度应该用string 的成员函数 length() 或 size() 。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯