目录

一、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;
}

输出的结果:

场景二:

#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函数时应该注意什么?

三、使用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;
}

输出结果:

补充知识: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;
}

输出结果:

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()函数:返回 '\0'之前的字符个数,因此需规范初始化字符数组。

【C语言】strlen()函数相关推荐

  1. C语言 strlen 函数 - C语言零基础入门教程

    目录 一.strlen 函数简介 二.strlen 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strlen 函数简介 ...

  2. C语言strlen()函数用法

    C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen ( ...

  3. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...

    C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...

  4. c语言strlen函数的作用是什么,c语言strlen函数的使用方法是什么

    c语言strlen函数的使用方法是什么 发布时间:2020-08-20 11:54:33 来源:亿速云 阅读:116 作者:小新 小编给大家分享一下c语言strlen函数的使用方法是什么,希望大家阅读 ...

  5. C语言 strlen()函数

    C语言 strlen 函数用来求字符串的长度(包含多少个字符). strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值.最终统计的字符串长度不包括\0. 头文件:st ...

  6. 【C语言 strlen函数的实现】

    strlen函数的实现 strlen函数是干什么用的 strlen函数是C语言的里的库函数,C语言中一般是计算字符串长度的 直接上代码示例: #include<stdio.h> #incl ...

  7. C语言 strlen(int),C语言 - strlen函数及int,char转换问题

    题目 intmain() { inti; chara[1000]; for(i=0;i<256;i++) a[i]=i+1; printf("len = %d\n",strl ...

  8. C语言 strlen函数实现

    用字符串时strlen()函数是用到最多的函数之一,其作用获取是获取字符串的长度. 函数定义如下: size_t strlen(const char *s); 代码实现如下: size_t Test_ ...

  9. C语言strlen()函数:返回字符串的长度

    转载自https://www.cnblogs.com/chenduzizhong/p/6032496.html 头文件:#include <string.h> strlen()函数用来计算 ...

  10. C语言strlen函数与sizeof函数的区别

    strlen函数与sizeof函数的区别 strlen函数和sizeof函数都可以用于获取字符串的长度,但是它们有几个重要的区别. strlen函数返回字符串的长度,而sizeof函数返回的是整个数组 ...

最新文章

  1. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
  2. 在VMware Workstation上安装Ubuntu 16.04 Server操作系统
  3. android MotionEvent
  4. 从EEG中解码想象的3D手臂运动轨迹以控制两个虚拟手臂
  5. mysql b 树删除操作,B-树的删除过程介绍
  6. 用 Python 和 OpenCV 检测图片上的条形码Detecting Barcodes in Images with Python and OpenCV
  7. 总帐科目的批量传输与复制
  8. Generative Adversarial Nets[BEGAN]
  9. python编辑邮件格式_python发送邮件模板
  10. 查看代码 index.html,Javascript查看大图功能代码实现
  11. AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
  12. 2017.5.8-morning
  13. 表字段identity
  14. 测试场景组件化轮子——用例元
  15. 输入广义表建立双亲表示的树and给定双亲表示的树输出广义表表示的树
  16. 编程之美1.7 光影切割问题
  17. this的五种绑定方式
  18. csdn最详细最牛逼的 阿里最新app自动化测试---自动化测试框架搭建
  19. 网络核心交换机和普通交换机有什么区别?
  20. 微型计算机逻辑元件有哪些,目前普遍使用的微型计算机所采用的逻辑元件有哪些...

热门文章

  1. 拆析promise.then的.then返回值
  2. 微信公众号消息通知 “errcode“:40164,“errmsg“:“invalid ip
  3. 曾经如落叶般斑斓缤纷,傲然天地之间
  4. 3DSMAX平时建模软件不会卡死,到了渲图时,渲染图出来了,软件就卡死了的问题是系统自带的输入法更新了和软件不兼容
  5. 最新照妖镜源码伪微信视频通话+邮箱通知版
  6. Web基础 HTML和CSS介绍和基本使用及语法,JavaScript和jQuery介绍和基本使用及语法
  7. 腾讯又一重磅服务停服!网友:陪了我5年了
  8. 廉价特斯拉也要来了,或发15万元级车型
  9. Leetcode练习 Python3实现(持续更新)
  10. 文字描边SVG动画生成器