c++ sizeof()和strlen()区别?

供稿:hz-xin.com     日期:2025-01-14
sizeof和strlen区别

sizeof是计算占用的字节数,为3是对的;strlen应该是取决于编译器对字符数组的处理方式的不同,因为使用不同的编译器,输出结果不一样

sizeof(str),其中str为字符串的头指针,指针占的空间为4字节,即为4
strlen(str),计算str的有效长度,hello长度为5,输出为5;
sizeof(s),s 是一个字符串,此时,sizeof 计算的是这个字符串的长度,除了hello占5个字节以外,还有一个字节的'\0'表示字符串结束,总共为6;
希望楼主能明白

sizeof与strlen的区别
(1)sizeof
<1> sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
<2> 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
<3> 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
<4>具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

(2)strlen
<1> strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
<2>它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

C
sizeof 是实际的存储空间。也就是这个字符数组实际在内存中占多少个字节。char a[7]定义的时候就已经分配空间了。7个。至于你存几个,随便,7个以下就存得下。以上就益出。
strlen 取字符串长度。也就是实际长度,不包括结束标志\0。字串以\0为结束标志。所以,遇到一个\0就代表结束了,这个字串实际就是a0.strlen(a)为2 。

补充:
char a[]="a0\0a0\0":没有数组下标,系统如何确定要给这个数组分配多少个内存单元呢?当然要看定义的时候赋值给他的元素个数了。你查一下,一共有几个?当然不要忘了最后的\0.
你蒙在哪里呢,就是对于\0的运用,如果把这个改一下。
char a[]="abcdef"你不会不懂了吧,那sizeof(a)一定是7.
那如果把上面的c和f改成\0呢?这里的\0只是做为其中的一个元素而已。是要占内存空间的。但是真正读取的时候要不要读那么多呢?当然不要,遇到第一个\0就不再进行读取了。但实际上这些\0以及\0后面的数据却仍然存在,而且做为字符串数组的一部分,要占用内存单元,这部分空间不允许再存放其他数据。

sizeof()取的是整个数组的长度,字符数字里字符的个数+最后的\0,就是7个
strlen()取数遇到第一个\0为止,所以它只取了"a0\0a0\0"这个字符串中前两个字符,即a和0,所以是2

声明数组时,给出定义了,"a0\0a0\0",编辑器自动生成它的大小7.就是说,你在这行程序char a[7]="a0\0a0\0";中,写成char a[]="a0\0a0\0";是一样的。

1.
sizeof
操作符的结果类型size_t,它在头文件中typedef为unsigned
int类型:
typedef
unsigned
int
size_t.
2.
sizeof是是长度运算符,
获得数据类型或是变量的长度,如果是数据类型,则返回数据类型大小,如果是用数组,则返回数组所占空间大小,strlen是计算字符串长度的函数,返回的是实际串长度,以char*
作参数
,且必须是以'\0'结尾。
3.
sizeof在编译的时候就把计算过,strlen的结果要在运行的时候才能计算出来。
4.
数组做长度运算符sizeof的参数不退化。数组做函数strlen的参数就退化为指针了,因为数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。

strlen函数
返回的是字符串的长度
是碰到'\0'结束

sizeof函数返回的是数据内存的大小。

delphi中函数返回数组问题
\/\/首先定义一个数组类型 type TArr = array of integer;\/\/然后定义返回这个数组类型的函数 function strSplit(strSplit,str:string):TArr ;var str: array[1..2] of integer;i: integer;begin str[1]:=0;str[2]:=1;for i:= 1 to 2 do result[i]:=strl[i];end;应该可以的,你再试...

20分求谭浩强的C程序设计基础习题
{p=(int*)malloc(sizeof(int)); f(p,a); printf(“%d 、n”,*p); } f(int *s,int p[][3]) {*s=p[1][1];} (45)以下程序的输出...strcpy(strlstrlen(strl)\/2,“es she”); printf(“%s 、n”,pl); } (10)以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并...

dec在pascal中是什么意思
sizeof 函数 返回参数所占的字节数 smallchange 属性 最小改变值 sorted 属性 是否允许排序 sqr 函数 平方函数 sqrt 函数 平方根函数 startmargin 属性 ...strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 strlicomp 函数 以最大长度比较两个字符串(不区分大小写) strlower 函数 将字符...

麻烦罗列下VB程序设计里的各种函数符号。并说明下各代表的意思。3Q...
sizeof 函数 返回参数所占的字节数 smallchange 属性 最小改变值 sorted 属性 是否允许排序 sqr 函数 平方函数 sqrt 函数 平方根函数 startmargin 属性 ...strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 strlicomp 函数 以最大长度比较两个字符串(不区分大小写) strlower 函数 将字符...

free pascal的函数过程大全
sizeof 函数 返回参数所占的字节数 smallchange 属性 最小改变值 sorted 属性 是否允许排序 sqr 函数 平方函数 sqrt 函数 平方根函数 startmargin 属性 ...strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 strlicomp 函数 以最大长度比较两个字符串(不区分大小写) strlower 函数 将字符...

pascal 的所有词表
sizeof 函数 返回参数所占的字节数 smallchange 属性 最小改变值 sorted 属性 是否允许排序 sqr 函数 平方函数 sqrt 函数 平方根函数 startmargin 属性 ...strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 strlicomp 函数 以最大长度比较两个字符串(不区分大小写) strlower 函数 将字符...