CC++中sizeof(),strlen(),length(),size()的区别

it2023-10-21  65

C/C++中sizeof(),strlen(),length(),size()的区别

C/C++中经常会碰到获取字符串长度的问题,比较常见的有以下四种方式:sizeof(),strlen(),length(),size(),那么这四种方式究竟有什么区别呢?

一、sizeof()

定义 sizeof()是一个操作符,注意不是函数,其作用是返回一个对象或类型所占的内存字节数。语法 sizeof有三种语法形式: 1) sizeof(object); //sizeof(对象) 2)sizeof object; //sizeof 对象 3)sizeof (type_name); //sizeof(类型) 其中,对象可以是任何类型的变量,以及表达式,sizeof对对象求内存的大小,最终都是转换为对象的数据类型来进行求值的 基本数据类型的sizeof

上边例子都是基本的数据类型,如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()返回字符数组或字符串所占的字节数。strlen是函数,要在程序运行过程中才能计算。并且参数类型必须是(char)*,当数组名作为参数传入时,实际上数组就退化为指针了,strlen()函数的功能就是返回字符串的长度,该函数实际上完成的功能是代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’,返回的长度大小不包括’\0’。在应用strlen()时不应该和保存字符串的数组混淆,比如定义一个保存字符串的数组: char mystring[100] = “test string”; 定义了一个字符型数组,数组大小为100,里面存放了11个字符。因此,sizeof(mystring)的大小为100,而strlen(mystring)的大小为11。

三、length()与size()

C++ reference中对于length()函数的解释是返回字符串的长度,对于size()函数的解释也是返回字符串的长度,这两者都是用于求string类对象长度的成员函数,并没有太大的区别。length()是因为沿用C语言的习惯而保留下来的,string类最初只有length()这个成员函数来求字符串的长度,但是后来引入了STL之后,为了兼容又加入了size()成员函数,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便于使用STL的算法,并且length()和size()成员函数返回的都是字节数。

最新回复(0)