strlen函数详解(每天认识一个库函数)

在使用库函数strlen时,我们需要引头文件string.h。

目录

一、使用搜索工具去了解strlen函数

二、需要注意的点

2.1 strlen函数求什么

2.2 参数要求

2.3 注意返回值

三、strlen函数的模拟实现

3.1 方法一

 3.2 方法二

3.3 方法三

 

一、使用搜索工具去了解strlen函数

     在       cplusplus.com - The C++ Resources Network中关于strlen库函数的解释如下:

cc01fd86b0c245b6a2b9cbe53e0e620d.png

      我们可以从关于库函数的介绍中了解许多信息,比如strlen函数的返回类型,需要的传参类型。

60a4a744e132496981d859b7238ecdc9.png

      除此之外我们还可以了解到函数的使用方式与使用场景,使用合适的工具去了解c语言中的库函数是一项必备技能。

     strlen函数是用来求字符串长度的,它求的是'\0'之前的字符个数,使用strlen函数时需要给它传一个地址,可以是字符串的首字符的地址,就可以求出字符串中'\0'之前的字符个数。

二、需要注意的点

2.1 strlen函数求什么

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

2.2 参数要求

     给strlen函数传参的时候,我们要注意传的地址指向的字符串必须以'\0'结尾,如果不以'\0'为结束标志,那么strlen函数会不断地找'\0',求得的结果是一个随机值,没有实际意义。

2.3 注意返回值

    strlen函数的返回类型是size_t类型的,即无符号整型。这一点需要尤其注意,容易出错,下面我们来通过一个例子来说明。

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = "adx";
	if ((strlen(arr2) - strlen(arr1)) > 0)
	{
		printf("arr2 > arr1\n");
	}
	else
	{
		printf("arr2 < arr1\n");
	}
	return 0;
}

运行结果是:
26bb68dd2ee34531a034283df6f78c68.png

为什么会这样呢?

     3a6aeb4bf7d84b1f844f2438aa419c91.png 

三、strlen函数的模拟实现

3.1 方法一

#include <stdio.h>

size_t my_strlen(const char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

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

}

 3.2 方法二

    方法二利用的是指针-指针的绝对值是两个指针之间的元素个数。

#include <stdio.h>
size_t my_strlen(const char* str)
{
	const char* end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - str;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;

}

3.3 方法三

    方法三是按照递归的方法来写的。

#include <stdio.h>
size_t my_strlen(const char* 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\n", len);
	return 0;

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值