C/C++中经常会碰到获取字符串长度的问题,比较常见的有以下四种方式:sizeof(),strlen(),length(),size(),那么这四种方式究竟有什么区别呢?
上边例子都是基本的数据类型,如int,long,double这样简单的内置数据类型.
结构体的sizeof当遇到结构体的sizeof()时会设计字节对齐问题,字节对齐问题这里就不介绍了,需要的话可以参考一下这一篇博客link,空的结构体的大小为一个字节。例子:
数组的sizeof数组的sizeof值等于数组所占用的内存字节数。 注意:
(1)当字符数组表示字符串时,其sizeof值将’/0’计算进去。 (2)当数组为形参时,其sizeof值相当于指针的sizeof值(4个字节)
指针的sizeof 指针是用来记录另外一个对象的地址的,在32位计算机中,一个指针变量的返回值为4个字节。指针变量的sizeof值与指针所指的对象没有任何关系。 函数的sizeof sizeof也可以对一个函数调用求值,其结果就是返回值类型的大小,函数并不会被调用。对函数求值的形式为:sizeof(函数名(实参表))。 注意:不可以对返回值类型为空的函数求值;不可以对函数名求值;对有参数的函数,在用sizeof时,须协商实参表。strlen()返回字符数组或字符串所占的字节数。strlen是函数,要在程序运行过程中才能计算。并且参数类型必须是(char)*,当数组名作为参数传入时,实际上数组就退化为指针了,strlen()函数的功能就是返回字符串的长度,该函数实际上完成的功能是代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’,返回的长度大小不包括’\0’。在应用strlen()时不应该和保存字符串的数组混淆,比如定义一个保存字符串的数组: char mystring[100] = “test string”; 定义了一个字符型数组,数组大小为100,里面存放了11个字符。因此,sizeof(mystring)的大小为100,而strlen(mystring)的大小为11。
C++ reference中对于length()函数的解释是返回字符串的长度,对于size()函数的解释也是返回字符串的长度,这两者都是用于求string类对象长度的成员函数,并没有太大的区别。length()是因为沿用C语言的习惯而保留下来的,string类最初只有length()这个成员函数来求字符串的长度,但是后来引入了STL之后,为了兼容又加入了size()成员函数,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便于使用STL的算法,并且length()和size()成员函数返回的都是字节数。