qq_43551304
2020-10-07 16:23
采纳率: 25%
浏览 101

关于C风格字符串和string初始化

#include<string>
#include<iostream>
#include<vector>
//#include<iterator> 
using namespace std;
int main(){
    string s = "lin";
    char s1[] = "lin";
    cout << sizeof(s) << endl;
    cout << sizeof(s1) << endl; 
    cout << s.size() << endl;
    return 0;
} 

为什么输出一个是8,一个是4呢。
还有s的长度不应该是4吗,还有最后一个空字符'\0'?
图片说明

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • wlj1234 2020-10-08 13:08
    已采纳

    std::string类包含指针和长度等信息,字符串存储在指针所指向的内存中。
    sizeof不会计算类指针所指向的内存数据大小。

    打赏 评论
  • elaine 2020-10-07 16:45

    size_type length() const _NOEXCEPT
    { // return length of sequence
    return (this->_Mysize);
    }

    size_type size() const _NOEXCEPT
        {   // return length of sequence
        return (this->_Mysize);
        }
        size()和length()返回的值相同,返回的都是字符串的长度。
    
    打赏 评论
  • return ️ 2020-10-07 18:02

    为啥我的string类型大小是24

    打赏 评论
  • bostonAlen 2020-10-07 21:36

    你这里的string是c++的,,不是c的,c的string的length是4,但这里string s的size大小是3,s1是char数组一共四个字符包含'\0,四个字符四个字节,sizeof是计算字节数的,关于sizeof(s)的大小这个是固定的,不关你s的字符串多少,有string的成员决定,我用vs2013的大小如下图。
    图片说明

    打赏 评论
  • threenewbee 2020-10-07 22:59

    string的长度包含了字符串本身和长度变量,不同的编译器编译出来又不一样,以你sizeof输出的为准。

    打赏 评论

相关推荐 更多相似问题