C语言:strlen函数

  • Post author:
  • Post category:其他




一、strlen()函数的简介

strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。下面是库中的strlen()函数:

size_t  strlen (const char* str);

说明:计算字符串sting的长度,并返回字符串string的长度

返回类型:size_t 是一个无符号长整型类型,直接作为数值运算时得注意,计算结果是否会越界

#include "stdio.h"
#include "string.h"

int main(void )
{
	char str[30] = "good morning everybody" ;  // 22个字符
	printf(" str = %s  strlen(str) = %d \n",str,strlen(str));
	return 0 ;
}

结果

在这里插入图片描述

注意事项:strlen是不会计算\0之后的长度的,strlen函数遇到\0就会停止下来

在上面字符串变量,赋值中加入一个 \0 测试一下

#include "stdio.h"
#include "string.h"

int main(void)
{
	char str[30] = "good morning \0 everybody";
	printf(" str = %s  strlen(str) = %d \n", str, strlen(str));
	return 0;
}

结果

在这里插入图片描述

测试发现不仅,strlen不计算 \0之后的数据,printf输出也一样

原因就回到数组的问题上了,printf是以%s,字符串的形式输出,遇到字符 ‘\0’ 就认为到达 数组末端了,然后就停止输出了。



二、strlen()的三种实现方法



2.1第一种方法(直接)

size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
	assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数断言一下
	int count = 0;//计数
	while (*str != '\0')
	{
		count++;//当它的字符不等于'\0'时,计数加一
		str++;//再往下一个字符找

	}
	return count;
}



2.2第二种方法(递归)

size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
	assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
	 if (*str != '\0')
	 {
	  return 1+my_strlen(str+1);
	 }
	 else
	 {
		 return 0;
	 }
}



2.3第三种方法(指针-指针)

两个指针相减,得到的是两个指针之间元素的个数。我们先用一个指针放首字符地址,然后再找到最后一个字符的地址,用最后一个字符地址减去第一个字符地址,就是他们之间元素个数。

size_t my_strlen(const char* str)//字符串是放在常量字符串中,不能被改变,所以这里最好用用const修饰一下下啦
{
	assert(str != NULL);//p如果接收过来的是空指针,那么这里运行会崩溃的,所以这里用assert函数诊断一下
	const char* start = str;//定义一个指针放字符串首字符的地址,因为*str接收的字符串为常量字符串,所以这里最好也用const修饰一下
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}



三、总结

字符串需要以\0作为结尾,strlen函数返回的是在字符串中\0前面出现的字符个数(不包含\0)



版权声明:本文为qq_27928443原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。