strlen和sizeof的使用及用法补充

来源:互联网 发布:开名淘宝店是真是假 编辑:程序博客网 时间:2024/06/06 00:42
<首先要知道strlen是求长度的,而sizeof是求大小的>


1.strlen的基本用法

<span style="font-size:18px;color:#993300;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){char arr1[]="abcd";char arr2[]={'a','b','c','d'};printf("%d\n",strlen(arr1));//此时输出为4printf("%d\n",strlen(arr2));//此时输出为随机值return 0;}</span></span>
为什么会是随机值呢?

因为strlen计算长度时是以‘\0’为基准的,它会直到遇到‘\0’时就停止计算。主函数里第一行数组初始化时自动在最后添加了一个‘\0’,而第二行不会添加‘\0’,所以第二种并不确定‘\0’具体出现的位置。


2.sizeof的基本用法

<span style="font-size:18px;color:#993300;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){char arr1[]="abcd";char arr2[]={'a','b','c','d'};printf("%d\n",sizeof(arr1));//此行输出为5printf("%d\n",sizeof(arr2));//此行输出为4return 0;}</span></span>
第一种初始化方式添加了‘\0’,所以总的有五个字符,而第二种没有‘\0’,所以数组元素大小为4。


3.有关于指针的

<span style="font-size:18px;color:#993300;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){char *str="abcdef";printf("%d\n",strlen(str));//此行输出为6printf("%d\n",sizeof(str));//此行输出为4return 0;}</span></span>
注意:指针的大小永远为4,所以sizeof输出的是4。

把代码稍微改动一下:

<font color="#993300" size="4"><span style="color:#330000;"><span style="color:#336666;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){        char str[]="abcdef";printf("%d\n",strlen(arr1));//此行输出为6printf("%d\n",sizeof(arr2));//此行输出为7return 0;}</span></span></span></font>
相同的道理,sizeof计算的时候还加上了‘\0’。

再看一个代码:

<span style="font-size:18px;color:#993300;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){int a=1;int b=2;int c=3;char *pArray[10]={&a,&b,&c};printf("%d\n",strlen(pArray));//此时输出为3printf("%d\n",sizeof(pArray));//此时输出为40return 0;}</span></span>
上边定义的是指针数组,数组里每个元素都为指针。所以数组大小为10,每个元素大小又为4,总共就为40。


4.关于数组初始化了元素个数时

<span style="font-size:18px;color:#993300;"><span style="color:#330000;">#include<stdio.h>#include<string.h>int main(){char str[10]="abcd";printf("%d\n",strlen(str));//此行输出为4printf("%d\n",sizeof(str));//此行输出为10return 0;}</span></span>
当数组初始化时固定了元素个数时,siazof计算的是驻足整个总共的大小。

若把程序稍微改动一下:把str[10]改为str[4]时strlen输出的值为随机值。因为还会添加一个‘\0’,数组大小超出了4个元素变成了5个。


5.关于数组做函数参数时

<span style="font-size:18px;color:#336666;"><span style="color:#330000;">#include<stdio.h>void fun(int array[10]){printf("%d\n",sizeof(array));//此时输出的时4}int main(){int array[10]={0};fun(array);return 0;}</span></span>
数组名做函数参数时,实际上是发生了降级处理。这里的array在函数里面作参数时传的是首元素的地址。因此sizeof所求的是数组中第一个元素的大小。


<总结>:只要记住最核心的一句话:strlen所求的是长度,以‘\0’作为计算的结束标志,若找不到‘\0’事则输出随机值;而sizeof所求的是大小,当数组以字符串形式给出初始化时,其所求的长度需要加上‘\0’。指针的大小永远为4。

0 0
原创粉丝点击