一、strlen函数的使用
strlen函数作为C语言中常运用的函数之一,其基本形式如下:
size_t strlen ( const char * str );
若要使用strlen函数,我们则需要注意以下几个方面的问题:
1.strlen函数的参数是字符型的数组,这个数组用char*(字符指针)来接收,且数组内容不能被修改(因此用const来修饰char*)。
2.字符串的结束标志是' \0 ',且strlen函数返回的是在字符串' \0 '之前的字符的个数(不含' \0 ')。
3.参数所指向的字符串必须以' \0 '结束,否则strlen函数的返回值为随机值(直到找到' \0 '为止)。
4.streln函数的返回值为size_t类型,即无符号整型。
5.使用strlen函数必须包含对应的头文件,即<string,h>。
例如以下示例:
注意:1.数组arr中的内容默认在字符串的结尾加上' \0 '(且省略' \0 ')。
2.size_t类型用%zd来表示,否则会报警告。
二、strlen函数的模拟实现
要实现strlen函数,即写出可以实现strlen函数功能的函数。
那么接下来我将为大家展示3种实现strlen函数功能的方法。
1.用函数递归的方法实现
首先,我们知道str是字符串指针数组,且str是数组名,指的是数组首元素的地址,即数组元素'a'的地址,对其解引用,得到数组元素'a'。带入到if语句中,得到(1 + my_strlen(str+1))。
其次,再次调用my_strlen函数。此时参数变为了(str+1),表示的是参数指向数组第二个元素的地址,即数组元素'b'的地址,再次对其解引用,便得到了数组元素'b',带入到if语句中,得到的则是(1+1+my_strlen(str+2))。
最后,如此不断的调用my_strlen函数,直到最后的参数指向' \0 ',此时再次带入到if语句中,得到的是(1+1+1+1+1+1+0),返回该值。
2.用计数器的方法实现
用计数器的方法实现,即计算数组中有几个元素。
首先,我们看到my_strlen这个函数,定义一个变量count用来计算数组元素的个数。在此,我们担心str的指针可能会存在问题,于是我们用asset来断言str。
其次,进入while循环,我们对str进行解引用,即得到的是数组首元素'a',与' \0 '进行判断,然后str自增,count自增。str自增得到str+1,即数组第二个元素的地址,再次解引用得到'b',再不断的进行循环。
最后,str+6得到' \0 '的地址,解引用后再比较,满足条件退出循环,且count也自增到了6,返回count的值为6。
3.用指针 - 指针的方式实现
为什么用指针减去指针能够实现呢?
深度学习过指针的都知道,指针数组之间的相减得到的绝对值是对应数组元素之间的数组元素的个数。
例如:
指针arr[5] - 指针arr[1]的绝对值为4,即指针之间有4个元素。
我们还可以类比为,3月12号减去3月2号,之间共相差10天。在这之中,3月12号和3月2号指的是指针,而10天指的是数组元素之间的个数。
我们再回来上段代码,定义p为str的指针,让p进入while循环,并与' \0 '进行判断,再让p自增得到下一个数组元素的指针,不断的进行循环,最终得到str[6]的指针,即p=str[6]。返回p - str(指针相减)得到的是数组元素之间的个数,即为6。
至此,我对strlen函数的介绍便结束了,作者纯小白,若有部分存在错误,请各位大佬进行指正,我一定虚心请教;若是满意,麻烦你们的小手点点赞,感谢各位的支持!!!