【C语言进阶:刨根究底字符串函数】 strlen 函数

本节重点内容:

  • 深入理解strlen函数的使用
  • 学会strlen函数的模拟实现

⚡strlen

a7aa2dc72c1342d6a43fa11b1e42a0c9.png

  • 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
  • 参数指向的字符串必须要以 '\0' 结束。
  • 注意函数的返回值为size_t,是无符号的( 易错 )

下面来举几个相关的例子:

1. 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。

代码示例一如下:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include

int main()
{
	char arr[] = "abc\0def";
	int len = strlen(arr);
	printf("%d", len);
	return 0;
}

运行结果如下:

cb36e411ebff4a08b7e8d19c5bab11ea.png

 代码示例二如下:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include

int main()
{
	char arr[3] = { 'a','b','c' };
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

运行结果如下:

0ec3d3340a304805952e6690d6201691.png

2. strlen函数的返回值为size_t,是无符号整形

代码示例如下: 

#define _CRT_SECURE_NO_WARNINGS
#include 
#include

int main()
{
	if (strlen("abc") - strlen("abcdef") > 0) // 无符号数减去无符号数得到的是无符号数
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}
	return 0;
}

这里如果按数学中的计算来看,3-6原本为-3,小于0输出<=,但是大家一定要注意,strlen函数的返回值类型是size_t(无符号整型),同时无符号数减去无符号数得到的是无符号数,因此判断结果为>0;

565dabb316084c01a48f29d2d8527c99.png

 运行结果如下:

685efff7b15f480abe21fd0e8fbab889.png


⚡模拟实现strlen函数

方法一:计数器

int my_strlen(const char* str) //const 放在*的左边保护的是指针所指向的内容
{
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[] = "hello world";
	int len = my_strlen(arr);
	printf("%d", len);
	return 0;
}

方法二:递归(不创建临时变量,求字符串长度)

#define _CRT_SECURE_NO_WARNINGS
#include 
#include

int my_strlen(const char* str) //const 放在*的左边保护的是指针所指向的内容
{
	if (*str != '\0')
		return 1 + my_strlen(str+1);
	else
		return 0;
}

int main()
{
	char arr[] = "hello world";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

方法三:指针-指针

#define _CRT_SECURE_NO_WARNINGS
#include 
#include

int my_strlen(const char* str) //const 放在*的左边保护的是指针所指向的内容
{
	char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}

int main()
{
	int len = my_strlen("abcdef");
	printf("%d\n", len);	
	return 0;
}

感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

你可能感兴趣的:(C语言进阶,c语言)