strlen()函数的实现,应用:求字符串长度,字符(数字)数组内数组个数

一,strlen()函数的实现

int my_strlen(const char* arr)
{
	assert(arr != NULL);
	int ret = 0;
	while (*arr)
	{
		ret++;
		arr++;
	}
	return ret;
	
}

二,strlen()计算字符串,字符数组,数字数组的长度

① 字符串:

 两种定义方式都可以用 strlen()计算长度。(只要strlen()里放的是个地址,就行)

② 字符数组:

 警告:

1. strlen()可以对,一系列单个字符进行计数,知道遇到‘\0',停止计数。

2. b3 和 b4 的区别:

b4 一定是 4,因为它第 5 位就遇到 ‘\0'了,也就是0,strlen()计数就停止了,但 b3 此处是恰好第 5 位是 0,所以它也停止了计数,不然它会一直计数知道碰到 0。

所以:b3 结果是一定的,而 b4 结果会随机(主要是看后面的内存里放的是什么)。

 ③ 数字数组:(以 int[5] 型数组为例)

解释如下:

图中一个方格表示一个字节,int[5] 共 20个字节,图中只画出来 16 个字节,也就是前 4 个 int 变量,这 4 个进行了初始化,分别为 1,2,3,0。

 int c1[5] 用 strlen(),将 c1 传入了函数,strlen(c1),但通过上面的 strlen()的实现,可以看到 strlen()函数是用 char * 类型的变量接受的,而 c1 本身是 int* 类型的,所以,进行了强制类型转换,将 c1 变为了 char* 类型,那 char* 类型变量,向后走一个是走 1 个字节,即走到第二个紫色格子处,而 int* 类型变量,向后走一个是走 4 个字节,即走到第一个绿色格子处。

所以,在 ret 计数了一个之后,会往后走一步,走 1 个字节,走到第二个紫色格子处,而第二个紫色格子里放的是0,(因为每种颜色的格子是一个 int 变量的 4 个字节,即,紫色的 4 个格子是 c1[0] 的 4 个字节,而 c1[0] 是 1,1 占用不了全部的 4 个字节,只占用了 1 个字节,所以后三个紫色格子是0),strlen()碰到 0 就结束计数了,所以打印出来的结果是 1。

当 c1[0] 数字足够大的时候,分配给它的 4 个字节里都不会是 0 了,此时用 strlen()就不会是 1了。

四个字节都不是0,接着往下是2,再下个字节是0,所以共5个。

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值