【C语言】strlen()函数

这篇具有很好参考价值的文章主要介绍了【C语言】strlen()函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、strlen()函数的简介

二、strlen()函数的具体使用

三、使用strlen函数的注意事项 

四、实现strlen函数功能的三种方式

1.计数器的方式

2.递归的方式

3.指针减指针的方式

总结


一、strlen()函数的简介

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

size_t  strlen (const char* str);

  1. 函数的参数为------const char* str:字符指针
  2. 返回值的类型------size_t:无符号整数(即:unsigned int)

前提知识:

  • const关键字:是用来定义常量的,若一个变量被const关键字修饰时,那么这个变量的值就不可以被改变。故:这里的 * str 的值是不能被修改的。
  • size_t数据类型:表示C中任何对象所能达到的最大长度,它是无符号整数。

   1.使用const关键字:这里只是计算字符串的长度,用const修饰,避免将原字符串修改掉。

   2.使用size_t数据类型:这里返回计算的字符串长度,长度最小值为0,不可能为负数。

二、strlen()函数的具体使用

场景一:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[10] = "abcde";
	int num = strlen(arr);
	printf("数组arr的长度为:%d\n", num);

	return 0;
}

输出的结果:

strlen,C语言库函数的实现,c语言

 场景二:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr[] = { 'a','b','c','d','e' };
	int num = strlen(arr);
	printf("数组arr的长度:%d\n", num);

	return 0;
}

输出的结果: 

strlen,C语言库函数的实现,c语言

上述两种场景输出的结果并不相同

为什么会出现这样的结果,我们在用strlen函数时应该注意什么?

三、使用strlen函数的注意事项 

strlen函数:当计算长度时,只有遇到'\0'才会停止计算,同时计算的长度不包含'\0'。

    场景一,arr字符数组中存储的是一个字符串(字符串是以'\0'为结束标志的),那么strlen遍历到字符 'e' 时,再向后遍历,就会遇到'\0',此时strlen停止遍历,返回字符个数:5;

    场景二:字符'a'、'b'、 'c' 、'd' 、'e'五个字符依次存储在arr的字符数组中,并没有存储'\0',所以'e'字符后面存储的内容我们并不知道有什么。而strlen函数只有遇到'\0'时才停止,所以返回的个数是一个随机值。

故:我们使用strlen函数时,应该检查字符数组是否以'\0'为结束标志。

四、实现strlen函数功能的三种方式

1.计数器的方式

代码如下:

#include <stdio.h>
#include <assert.h>

int count_strlen(const char* p)
{
	assert(p != NULL);
	int count = 0;
	while (*p != '\0')
	{
		count++;
		p++;
	}
	return count;
}

int main()
{
	char arr1[] = "abcdefg";
	int num1=count_strlen(arr1);
	printf("字符串arr1的长度为:%d\n", num1);

	return 0;
}

输出结果:

strlen,C语言库函数的实现,c语言

补充知识:assert(断言):是一个宏。

assert 的作用是,将括号中的表达式计算出 ,如果其值为假(即为0),那么它会打印出一条出错信息,然后终止程序的运行。这里的assert是防止指针p指向为NULL。

2.递归的方式

代码如下:

#include <stdio.h>
#include <assert.h>
int recursion_strlen(char* p)
{
    assert(p != NULL);
	if (*p != '\0')
	{
		return 1 + recursion_strlen(++p);
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr2[] = "abcdef";
	int num2 = recursion_strlen(arr2);
	printf("字符串arr2的长度为:%d\n", num2);

	return 0;
}

输出结果:

strlen,C语言库函数的实现,c语言

3.指针减指针的方式

代码如下:

#include <stdio.h>
#include <assert.h>

int point_strlen(char* p)
{
	assert(p != NULL);
	char* start = p;
	while (*p != '\0')
	{
		p++;
	}
	return p - start;
}
int main()
{
	char arr3[] = "abcd";
	int num3 = point_strlen(arr3);
	printf("字符串arr3的长度为:%d\n", num3);

	return 0;
}

输出结果:

strlen,C语言库函数的实现,c语言


总结

strlen()函数:返回 '\0'之前的字符个数,因此需规范初始化字符数组。 文章来源地址https://www.toymoban.com/news/detail-649790.html

到了这里,关于【C语言】strlen()函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:Strlen()函数你了解多少?

    C语言中strlen是一种函数,主要用于计算字符串的长度。 🚩 strlen()从字符串的开头位置依次往后面计数,直到遇到‘\\0’停止,所计算的字符串大小为‘\\0’以前的字符所计算的值,最终的字符串长度不包括‘\\0’ 🚩 strlen因为是一种函数,因此调用这个函数需要引用的头文

    2024年02月06日
    浏览(78)
  • C语言的库函数:strlen的用法

    首先,strlen使可以计算字符串的长度,且只能用于字符串,计算的是\\0之前的字符个数。 因为strlen是库函数,所以其头文件是string.h 输出结果如下:  为何arr1输出值为33? 因为arr数组中存放的是a b c d e f \\0 ,而arr1中放的是a b c..\\0。 strlen只有在遇到\\0时才会停下来,而arr1中不知

    2024年02月12日
    浏览(46)
  • 【C语言】指针进阶之sizeof和strlen函数的对比

    目录  1.sizeofyu 2.strlen函数   3.sizeof与strlen的对比   sizeof计算变量所占内存内存空间 大小 的,单位是 字节 ,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的大小。 sizeof 只关注占⽤内存空间的大小,不在乎内存中存放什么数据。 举个例子: 运行结果

    2024年01月22日
    浏览(54)
  • c语言练习41:深入理解字符串函数strlen strcpy strcat

    模拟实现:”strlen   strcpy   strcat strlen   strcat:

    2024年02月09日
    浏览(51)
  • C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)

      strlen即为string length,顾名思义该函数是用来求字符串长度的。在介绍strlen函数之前,我们要先介绍一下\\\"\\0\\\"这个转义字符。任何一个字符串后面都会隐藏一个\\\"\\0\\\",该转义字符是字符串结束的标志,所以我们在使用strlen函数求字符串长度时,遇到\\\"\\0\\\"时停止读取,此时\\\"\\0\\\"前的

    2024年01月18日
    浏览(54)
  • 提升内功之模拟实现库函数strlen/strncpy/strcmp/strcat/strstr/memcpy/memmove

    strlen函数的作用就是求字符串的首元素开始往后计算字符串的长度,直到’\\0‘,但不会把\\0的长度计算进去 strncpy的作用就是从source指向的字符串复制num个字节的内容到destination指向的字符串去 如果source的长度小于num,则填充0 注意source和destination的内容在空间上不要重叠,如

    2024年02月16日
    浏览(45)
  • PHP strlen()函数详解,PHP获取字符串长度

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 strlen() 可以返回 「字符串」 的 「长度」 。 语法 参数 $str :需要计算长度

    2024年02月15日
    浏览(62)
  • 【C语言之区分sizeof 和 strlen】

    前言: 首先,我们需要明白它们的 根本区别,sizeof属于也属于单目操作符,而strlen属于库函数 / 知识点回顾 / 单目操作符:单目运算符对应只有一个操作数 常见的单目操作符: 常见的单目操作符 描述 ! 逻辑非 ’ - ‘ 负 ’ + ‘ 正 取地址 sizeof 计算一个数据类型的

    2024年02月11日
    浏览(47)
  • C语言sizeof和strlen的区别?

    sizeof本质是运算符(sizoof既是也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。 sizeof运算符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大

    2024年02月10日
    浏览(46)
  • 字符函数strlen、strcpy、strcat、strcmp、strstr、strtok、 strerror和perror函数

    目录  1、strlen函数 strlen函数的模拟实现 2、strcpy函数 strcpy函数的模拟实现  strncpy函数  strncpy函数的模拟实现 3、srtcat函数 strcat函数的模拟实现  strncat函数 strncat函数的模拟实现 4、strcmp函数 strcmp函数的模拟实现 strncmp函数 5、strstr函数 strstr函数的模拟实现 6、strtok函数 7、

    2024年04月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包