Strlen函数详解

Strlen函数详解

函数介绍

strlen函数的函数原型
size_t strlen( const char *string );
  • 由此可以看出strlen函数的返回值类型是size_t类型的
库函数下的strlen
#include
int main()
{
	char arr[20] = "abcdef";
	int len = strlen(arr);
	printf("%d", len);
	return 0;
}
  • 打印的结果为6,strlen是不会计算\0的长度的,strlen函数遇到\0就会停止下来
下面来看一个代码
#include
#include
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abc";
	if (strlen(arr2) - strlen(arr1) > 0)
		printf("arr2>arr1");
	else
		printf("arr2);
	return 0;
}
  • 上面的代码打印的结果是arrr2>arr1,但是在我们看来,strlen(arr1)的大小为6,strlen(arr2)的大小为3,那么为什么会出现strlen(arr2)-strlen(arr1)>0的结果呢?
  • 原因在于,我们在上面已经提到了说strlen函数的返回值类型是size_t类型,也就是无符号的整数类型,无符号类型是大于等于0的,两个strlen的返回值类型都是size_t类型的,那么两个size_t类型的数字进行相减的结果同样也是size_t类型的,那么返回值的类型也就是size_t类型的了
  • 所以在使用strlen函数的时候,一定要注意strlen函数的返回值类型是size_t类型的,不然的话,可能会容易出错

模拟实现strlen函数的三种方法

  • 我们在进行模拟实现的时候,可以把strlen函数的返回值类型给成int类型,也可以把他的返回值类型给成size_t类型的,都说的通,使用int类型的话,在有些情况下,可能会更加准确,就比如说是上面的那种情况,使用size_t类型确保了返回值都是正数,所以说,都说的通
1.计数器的方法
#include
#include
int my_strlen(const char *str)
{
	assert(str);
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d",len);
	return 0;
}

2.递归的方法
#include
#include
int my_strlen(const char* str)
{
	assert(str);
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d", len);
	return 0;
}

3.指针相减的方法
#include
#include
int my_strlen(char* str)
{
	assert(str);
	char* ret = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - ret;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d", len);
	return 0;
}

strlen函数的注意事项

  • 字符串需要以\0作为结尾,strlen函数返回的是在字符串中\0前面出现的字符个数(不包含\0)
  • 参数指向的字符串必须要以\0作为结束
  • 注意函数的返回值类型是size_t类型
  • 模拟实现

你可能感兴趣的:(Strlen函数详解)