每天深解一个字符串类函数之strlen函数

目录

一、引用头文件

二、strlen函数的作用

三、理解strlen函数的定义

1、返回类型size_t

2、参数部分const char* str

四、使用strlen函数

五、注意要点

六、模拟实现(以C语言为例)

方法1:

方法2:


一、引用头文件

所有的库函数都要引用头文件,字符串类函数也一样,它们的头文件均为<cstring> (string.h)

引用方式如下:

C语言

#include <string.h>

C++

#include <cstring>

二、strlen函数的作用

计算字符串的长度。

三、理解strlen函数的定义

size_t strlen ( const char * str );

其中size_t是函数的返回类型,const char*是函数的形参类型,str是函数定义的形参。

1、返回类型size_t

size_t是一种无符号整型数据类型,它的定义和具体实现与操作系统相关。在32位系统中,size_t通常被定义为‌unsigned int,4字节大小;而在64位系统中,它被定义为unsigned long,8字节大小。

该函数返回值为字符串的长度,因此使用size_t可以杜绝返回值因错误操作改成负数,同时因其无符号位,可以表示更大的数。但也因此无法直接进行一些附加操作,例如通过字符串长度相减比较两个字符串谁更长。

2、参数部分const char* str

const用于创建常变量即变量具有常属性--不可更改。

该函数使用传址调用方式,传输的是char*的地址,在其前面加上const,可以杜绝因错误操作更改字符串。(该函数只需计算字符串长度,不必更改字符串)这在一定程度上提高了程序的安全性。

四、使用strlen函数

#include <cstring>//include <string.h>
#include <cstdio>//include <stdio.h>
int main()
{
	char arr[] = "hello";
	size_t ret = strlen(arr);
	printf("%zd", ret);//%zd用于打印size_t类型数据//5
	return 0;
}

函数的返回类型size_t,因此用size_t的变量接收可以保证数据不会损失。

五、注意要点

1、传参可以传指针、数组名(此时表示数组首元素地址)、字符串(此时传的是首字符地址)。

2、strlen函数计算的字符串必须以'\0'结束。

六、模拟实现(以C语言为例)

方法1:

#include <assert.h>
#include <stdio.h>
int my_strlen(const char arr[])
{
	assert(arr != NULL);
	int count = 0;
	int i = 0;
	while (arr[i] != '\0')
	{
		count++;
		i++;
	}
	return count;
}
int main()
{
	char arr[] = "hello";
	int count = my_strlen(arr);
	printf("%d\n", count);
	return 0;
}

此方法与C语言标准定义的库函数有两处不同:

1、返回值我使用了int,在以知无误的情况下提高了利用率。

例如:

#include <assert.h>
#include <stdio.h>
int my_strlen(const char arr[])
{
	assert(arr != NULL);
	int count = 0;
	int i = 0;
	while (arr[i] != '\0')
	{
		count++;
		i++;
	}
	return count;
}
int main()
{
	char arr1[] = "hello";
    char arr2[] = "hello!";
	int count1 = my_strlen(arr1);
	int count2 = my_strlen(arr2);
    if (count1-count2 > 0)
        printf(">");
    else 
        printf("<=");
	return 0;
}

用该方法可得<=,而用库函数strlen则只能得到>。

2、形参我使用数组,这与库函数strlen只在实现方式上有所不同,但在使用上没什么区别。

方法2:

#include <assert.h>
#include <stdio.h>
size_t my_strlen(const char* str)
{
	assert(str != NULL);
	size_t count = 0;
	int i = 0;
	while (*(str+i) != '\0')
	{
		count++;
		i++;
	}
	return count;
}
int main()
{
	char arr[] = "hello";
	size_t count = my_strlen(arr);
	printf("%zd\n", count);
	return 0;
}

此方法与C语言标准定义的库函数是相同的。

每日一学,今天你又超过了百分之九十九的人。

如果本篇文章对你有帮助,请点个关注和赞吧!

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值