strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。
例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。
#include <stdio.h>
#include <string.h>
int main()
{
int ret = 0;
char arr[] = "abcdef";
ret = strlen(arr);
printf("%d\n",ret);
return 0;
}
那么,这个函数是具体如何实现的呢?我们可不可以编写一个具有计算字符串长度的函数呢?
方式1:
使用while循环逐一判断,再用创建一个变量count来计数,直到遇到"\0"退出循环。
int my_strlen(const char* arr) //不需要改变字符串的值,故用const修饰,提高函数安全性
{
int count = 0;
while(*arr)
{
count++;
arr++;
}
return count;
}
方式2:
运用递归的思想,从前向后逐字符判断,若此字符不为“\0”,则返回下一个递归函数,直到遇到字符“\0”结束递归。
int my_strlen(const char* arr)
{
if(*arr)
return 0;
else
return 1+my_strlen(arr+1);
}
方式3:
运用指针的减法来判断(注:减法运算的值是两个指针在内存中的距离,以数组元素的长度为单位,例如指针p1指向arr[i],指针p2指向arr[j],则p2-p1就是j-i的值,即也就是间隔之间的元素个数。)
int my_strlen(const char* arr)
{
char *p = arr; //定义一个指针存放字符串首元素的地址
while(*p != '\0')
p++;
return p-arr;
}
最后,我们也可以看看在库函数中它是如何实现的(用的平台为VS2008)
size_t __cdecl strlen (
const char * str
)
{
const char *eos = str;
while( *eos++ ) ;
return( eos - str - 1 );
}
可以看出,它用的是指针的减法运算来计算字符串长度,由于它在循环中使用自增,到最后为“\0”时,多加1次,因此最后返回时减去1。
strlen函数是用来计算字符串长度的一个函数,其包含在string.h头文件中。
例如:假设一个字符串为“abcdef”,在经过strlen函数计算后应该为6。