String中size()、length()、sizeof()的区别

发布时间 2023-05-06 10:39:00作者: CatCafe
  • 在C++中,std::string类有两个成员函数可以用于获取字符串的长度:size()和length()。这两个函数的功能是相同的,它们都返回字符串中字符的数量(不包括结尾的null字符)。
  • 这两个函数的区别只是名称不同,其功能是相同的,都用于返回字符串中字符的数量。
  • 在实际使用中,size()和length()可以互换使用。但更倾向于使用size(),因为它在STL容器中被广泛使用,并且也被一些其他的STL容器和算法使用。

示例程序

#include <bits\stdc++.h>
using namespace std;
int main()
{
    string str="abc";
    cout<<"size: "<<str.size()<<endl;
    cout<<"length: "<<str.length()<<endl;
    cout<<"sizeof(str): "<<sizeof(str)<<endl;
    string a="a";
    cout<<"sizeof(a): "<<sizeof(a)<<endl;
}

输出结果如下:

size: 3
length: 3
sizeof(str): 32
sizeof(str): 32
  • 使用sizeof()去验证string的长度,为什么字符串长度不同一个是a,一个是abc,得到的长度却是相同的?都是32
  • 解释:
    sizeof()是C和C++中的运算符,用于获取一个变量或数据类型所占用的字节数。在这里a或者abc都是string类的一个对象。其大小由类的内部实现方式决定。通常情况下,一个std::string对象的大小是由它所包含的数据和信息的总大小来决定的,而不是它所表示的字符串的长度。返回的是一个对象所占用的内存大小,它并不一定等于这个对象所表示的值的大小。在这个例子中,sizeof(str)返回的是std::string对象在内存中占用的大小,而不是字符串"abc"的大小。对象的大小取决于其实现方式和编译器的实现细节,因此在不同的编译环境下,sizeof(string)的返回值可能会不同。在此例中,sizeof(str)的值为32,可能是因为编译器将std::string对象实现为一个包含指针、长度和容量等信息的类,而这些信息所占用的空间大小为32字节。