您的位置:首页 > 其它

strlen和sizeof的使用及用法补充

2015-03-26 10:03 381 查看
<首先要知道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));//此时输出为4
printf("%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));//此行输出为5
printf("%d\n",sizeof(arr2));//此行输出为4
return 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));//此行输出为6
printf("%d\n",sizeof(str));//此行输出为4
return 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));//此行输出为6
printf("%d\n",sizeof(arr2));//此行输出为7
return 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));//此时输出为3
printf("%d\n",sizeof(pArray));//此时输出为40
return 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));//此行输出为4
printf("%d\n",sizeof(str));//此行输出为10
return 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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: