初识strlen函数

strlen函数是一个位于C标准库<string.h>的库函数

是用以计算字符串长度的函数,即为计算 ‘\0’前字符的数量

函数的声明与使用

size_t strlen(const char *str)

参数类型是 字符指针,在调用strlen函数时,需将数组的数组名(也就是首元素地址)传给strlen函数,strlen函数会以此地址为起始位置,向后计算字符串长度。

返回值类型是 size_t,其实也就是 unsigned int 类型。

举个例子

int main()
{
	char arr[] = "123456789";
	size_t sz = strlen(arr);
	printf("%u", sz);
	return 0;
}

strlen函数的使用非常简单,但有两个需要注意的地方

1.只有strlen函数找到 \0 时,方会停止计算长度。诺所需求长度的字符数组中无 \0,strlen会自起始坐标往后,一直寻找\0,直到找到\0为止。此时函数的返回值是随机的。

int main()
{
	char arr[] = {'1','2','3','4','5'};
	size_t sz = strlen(arr);
	printf("%u", sz);
	return 0;
}

 2.strlen的返回值是 size_t类型的,即无符号整型。

在比较两字符串长度时,不建议使用相减的形式

比如以下这个情况

int main()
{
	char arr1[] = "123456";
	char arr2[] = "123456789";
	size_t sz1 = strlen(arr1);
	size_t sz2 = strlen(arr2);
	if (sz1 - sz2 > 0)
		printf("arr1 > arr2");
	else
		printf("arr1 < arr2");
	//printf("%u", sz);
	return 0;
}

 size_t相减时,整个表达式会发生算数转化,在内存中存放的-3的补码会被看作是size_t类型数据的补码,因size_t类型的原反补相同,也就是-3的补码将被看做是表达式结果的原码,是一个非常打的数字。

strlen函数的三种模拟

三种模拟,实际上都是以找\0为根本的,借助不同的思想,完成对字符串长度的计算

1.计数器实现 

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

2.递归实现

size_t my_strlen(char* str)
{
	if (*str != '\0')
		return my_strlen(str + 1) + 1;
	else
		return 0;
}

3.指针实现

size_t my_strlen(char* str)
{
	char* ret = str;
	while (*str++);
	return str - ret-1;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值