strlen和sizeof的使用及用法补充

<首先要知道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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值