C语言strlen函数详解

strlen函数的介绍

strlen函数是C语言中的一个字符串处理函数,用于计算一个字符串的长度,即该字符串中包含的字符数(不包括字符串结尾的’\0’),头文件为<string.h>,基本语法为size_t strlen(const char *str);

strlen函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
   
	char arr[20] = "hello word";
	printf("%zd", strlen(arr));
	return 0;
}

输出结果
在这里插入图片描述

strlen函数的返回类型为size_t,所以使用%zd输出(%zd为无符号整型)

strlen函数的注意事项

参数指向的字符串必须要以 ‘\0’ 结束
接下来看一串没有\0的代码

#include<stdio.h>
#include<string.h>
int main()
{
   
	char arr[] = {
    'a','b','c' };
	printf("%zd\n",strlen(arr));
	return 0;
}

在这里插入图片描述
字符‘a’,‘b’,‘c’ 三个字符依次存储在arr数组中,并没有存储\0,所以c后面是什么我们并不知道,但是strlen计算的是\0之前的字符数,所以这里返回的是一个随机值。所以我们在使用strlen函数时应检查字符串中是否有\0。

strlen函数的模拟实现

一、计数器的方法
#inlcude<stdio.h>
#include<assert.h>
size_t my_strlen(const char* arr)
{
   
	int count = 0;
	assert(arr!=NULL);
	//定义一个count变量,计算出arr元素的个数
	//遍历arr数组当*arr不等于\0时count++;
	while (*arr != '\0')
	{
   
		
		count++;
		arr++;
	}
	//最后将count返回
	return count;
}
int main()
{
   
	char arr[] = "hello word";
	size_t ret = my_strlen(arr);
	printf("%zd\n", ret);
	return 0;
}

输出结果
在这里插入图片描述
注:assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误流 stderr 中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。使⽤ assert() 有⼏个好处:它不仅能⾃动标识⽂件和出问题的⾏号,还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题,不需要再做断⾔,就在 #include <assert.h> 语句的前⾯,定义⼀个宏 NDEBUG 。

二、地址相减的方法
#inlcude<stdio.h>
#include<assert.h>
size_t my_strlen(const char* arr)
{
   
	const char* start = arr;
	//将arr的首元素地址存放start中
	assert(arr!=NULL);
	while (*arr != '\0')
	{
   
		arr++;
	}
	//遍历arr,此时arr的位置来到了\0
	return arr - start;
	//将arr - start的值返回
}
int main()
{
   
	char arr[] = "hello word";
	size_t ret = my_strlen(arr);
	printf("%zd\n", ret);
	return 0;
}

输出结果
在这里插入图片描述

三、递归的方法
size_t my_strlen(char*arr)
{
   
	if (*arr != '\0')
	{
   
		return 1 + my_strlen(arr + 1);
	}
	//当arr!= \0时让1+my_strlen(arr+1),此时arr+1指向'e'的位置,再重复此操作
	else
	{
   
		return 0;
	}
}
int main()
{
   
	char arr[] = "hello word";
	size_t ret = my_strlen(arr);
	printf("%zd\n", ret);
	return 0;
}

输出结果
在这里插入图片描述
总结:在使用strlen函数时应注意字符串中有没有包含\0

相关推荐

  1. C语言——oj刷题——模拟实现库函数strlen

    2023-12-08 22:44:02       55 阅读
  2. C语言--strlen函数的模拟实现(3种)

    2023-12-08 22:44:02       27 阅读
  3. C语言第四十八弹---多种方法模拟实现strlen函数

    2023-12-08 22:44:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 22:44:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 22:44:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 22:44:02       82 阅读
  4. Python语言-面向对象

    2023-12-08 22:44:02       91 阅读

热门阅读

  1. C/C++ Linux 终端 高亮调试

    2023-12-08 22:44:02       64 阅读
  2. SpringMVC常用注解

    2023-12-08 22:44:02       59 阅读
  3. TCP通讯

    TCP通讯

    2023-12-08 22:44:02      55 阅读
  4. Redis研学-五种基本类型的常用命令

    2023-12-08 22:44:02       57 阅读
  5. 嵌入式面试题

    2023-12-08 22:44:02       58 阅读
  6. UVa489刽子手游戏题解

    2023-12-08 22:44:02       70 阅读
  7. vue3 组建传值

    2023-12-08 22:44:02       62 阅读
  8. MYSQL窗口函数详解和实战(内含示例)

    2023-12-08 22:44:02       47 阅读
  9. 缺陷责任期与质量保修期如何快速区分?

    2023-12-08 22:44:02       50 阅读