五分钟让你明白c语言sizeof与strlen的区别

sizeof:在c语言中是一个判断数据类型或者表达式长度的运算符
strlen:首先它是一个函数(而且是库函数),它所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’)为止,然后返回计数器值(长度不包含’\0’)。
使用strlen函数时一定要引头文件#include<string.h>


#incldue<string.h>//引头文件
int main()
{
	char ch[10];
	int len = strlen(ch);//strlen函数求出来需要接收它返回的值
	return 0;
}

下面看具体看代码实现吧,这样更有助于理解。





对比一 :求数据类型

sizeof:

	printf("%d\n", sizeof(int));//4
	printf("%d\n", sizeof(char));//1
	printf("%d\n", sizeof(float));//4
	printf("%d\n", sizeof(double));//8
	printf("%d\n", sizeof(long));//4
	printf("%d\n", sizeof(long long));//8

在这里插入图片描述



strlen:直接报错,说明它不可以求数据类型。**

在这里插入图片描述





对比二 求整数数组

sizeof:

	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//整数数组
		printf("%d\n", sizeof(arr));//36

在这里插入图片描述

strlen: 不可以求整数数组

在这里插入图片描述







对比三 求字符串长度

sizeof:sizeof求字符串会把’\0’算作一个字符,不需要以’\0’结束。

	char ch1[] = "abcdef";//这是字符串最后有默认的'\0'
	char ch2[] = { 'a', 'b', 'c', 'd', '\0' };//这是字符数组,'\0'需要自己加
	char ch3[] = { 'a', 'b', 'c', 'd' };//比如这个没有'\0' 输出数组大小就是随机值

	printf("%d\n", sizeof(ch1));//7
	printf("%d\n", sizeof(ch2));//5
	printf("%d\n", sizeof(ch3));//4

在这里插入图片描述



strlen:strlen函数求字符串并不会把’\0’算作一个字符,只是判断结束的标志。

	char ch1[] = "abcdef";//这是字符串数组,最后有默认的'\0'
	char ch2[] = { 'a', 'b', 'c', 'd', '\0' };//这是字符数组,'\0'需要自己加
	char ch3[] = { 'a', 'b', 'c', 'd' };//比如这个没有'\0' 输出数组大小就是随机值


	printf("%d\n", strlen(ch1));//6
	printf("%d\n", strlen(ch2));//5
	printf("%d\n", strlen(ch3));//这的16只是随机值

在这里插入图片描述



对比了这么多,既然说了strlen是函数,那接下来看一下它的原型和它是怎么实现的

自己模拟strlen函数


size_t my_strlen(const char* str)
{
	int count = 0;//计数器
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;//返回计算得到的值
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值