【C语言】strlen()函数
目录
一、strlen()函数的简介
二、strlen()函数的具体使用
三、使用strlen函数的注意事项
四、实现strlen函数功能的三种方式
1.计数器的方式
2.递归的方式
3.指针减指针的方式
总结
一、strlen()函数的简介
strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 '\0' 为结束标志,然后将计算的长度返回,计算的长度并不包含'\0'。下面是库中的strlen()函数:
size_t strlen (const char* str);
- 函数的参数为------const char* str:字符指针
- 返回值的类型------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()函数相关推荐
- C语言 strlen 函数 - C语言零基础入门教程
目录 一.strlen 函数简介 二.strlen 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.strlen 函数简介 ...
- C语言strlen()函数用法
C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen ( ...
- 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...
C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...
- c语言strlen函数的作用是什么,c语言strlen函数的使用方法是什么
c语言strlen函数的使用方法是什么 发布时间:2020-08-20 11:54:33 来源:亿速云 阅读:116 作者:小新 小编给大家分享一下c语言strlen函数的使用方法是什么,希望大家阅读 ...
- C语言 strlen()函数
C语言 strlen 函数用来求字符串的长度(包含多少个字符). strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值.最终统计的字符串长度不包括\0. 头文件:st ...
- 【C语言 strlen函数的实现】
strlen函数的实现 strlen函数是干什么用的 strlen函数是C语言的里的库函数,C语言中一般是计算字符串长度的 直接上代码示例: #include<stdio.h> #incl ...
- 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 ...
- C语言 strlen函数实现
用字符串时strlen()函数是用到最多的函数之一,其作用获取是获取字符串的长度. 函数定义如下: size_t strlen(const char *s); 代码实现如下: size_t Test_ ...
- C语言strlen()函数:返回字符串的长度
转载自https://www.cnblogs.com/chenduzizhong/p/6032496.html 头文件:#include <string.h> strlen()函数用来计算 ...
- C语言strlen函数与sizeof函数的区别
strlen函数与sizeof函数的区别 strlen函数和sizeof函数都可以用于获取字符串的长度,但是它们有几个重要的区别. strlen函数返回字符串的长度,而sizeof函数返回的是整个数组 ...
最新文章
- Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
- 在VMware Workstation上安装Ubuntu 16.04 Server操作系统
- android MotionEvent
- 从EEG中解码想象的3D手臂运动轨迹以控制两个虚拟手臂
- mysql b 树删除操作,B-树的删除过程介绍
- 用 Python 和 OpenCV 检测图片上的条形码Detecting Barcodes in Images with Python and OpenCV
- 总帐科目的批量传输与复制
- Generative Adversarial Nets[BEGAN]
- python编辑邮件格式_python发送邮件模板
- 查看代码 index.html,Javascript查看大图功能代码实现
- AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
- 2017.5.8-morning
- 表字段identity
- 测试场景组件化轮子——用例元
- 输入广义表建立双亲表示的树and给定双亲表示的树输出广义表表示的树
- 编程之美1.7 光影切割问题
- this的五种绑定方式
- csdn最详细最牛逼的 阿里最新app自动化测试---自动化测试框架搭建
- 网络核心交换机和普通交换机有什么区别?
- 微型计算机逻辑元件有哪些,目前普遍使用的微型计算机所采用的逻辑元件有哪些...
热门文章
- 拆析promise.then的.then返回值
- 微信公众号消息通知 “errcode“:40164,“errmsg“:“invalid ip
- 曾经如落叶般斑斓缤纷,傲然天地之间
- 3DSMAX平时建模软件不会卡死,到了渲图时,渲染图出来了,软件就卡死了的问题是系统自带的输入法更新了和软件不兼容
- 最新照妖镜源码伪微信视频通话+邮箱通知版
- Web基础 HTML和CSS介绍和基本使用及语法,JavaScript和jQuery介绍和基本使用及语法
- 腾讯又一重磅服务停服!网友:陪了我5年了
- 廉价特斯拉也要来了,或发15万元级车型
- Leetcode练习 Python3实现(持续更新)
- 文字描边SVG动画生成器