| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 常见字符串函数解析+模拟实现——C语言 -> 正文阅读 |
|
[C++知识库]常见字符串函数解析+模拟实现——C语言 |
目录 一、strlen
? ? ? ? 我们知道strlen函数用来计算字符串?str?的长度的,但是有些细节我们需要注意: ? ? ? ? 1:字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。 ? ? ? ? 2:参数指向的字符串必须要以 '\0' 结束;没有 '\0' 结束的话strlen会接着往下计算,直至内存中某处出现'\0'(这时strlen返回的值是随机值)。 ? ? ? ? 3:注意函数的返回值为size_t,是无符号的。 strlen的模拟实现:
运行结果: 二、strcpy
C 库函数strcpy把?src?指针所指向的字符串复制到?dest 数组。 需要注意的是: 1、如果目标数组 dest 不够大,而src字符串的长度又太长,可能会造成缓冲溢出的情况。 2、src字符串必须以 '\0' 结束,且strcpy会将src字符串中的 '\0' 拷贝到目标空间。 3、目标空间必须可变,若目标空间为常量就没办法实现strcpy。 模拟实现strcpy:
运行结果: ?三、strcmp
C 库函数strcmp把?str1?所指向的字符串和?str2?所指向的字符串进行比较,并返回某一数值。 其中有两个参数str1和str2 :str1?-- 要进行比较的第一个字符串。str2?-- 要进行比较的第二个字符串。 该函数返回值如下:
那它是如何比较两个字符串的? 两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 '\0' 为止;?以"abcdef" 和 "ABCDEF" 两个字符串为例比较,显然左边字符串的ASCII值是大于右边的ASCII值,最后strcmp会返回正值以表示左边字符串比右边字符串大。 模拟实现strcmp:
运行结果: 四、strcat?
C 库函数strcat把?src?所指向的字符串追加到?dest?所指向的字符串的结尾,其中有两个参数dest和src:dest?-- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串;src?-- 指向要追加的字符串,该字符串不会覆盖目标字符串。最后strcat会返回一个指向最终的目标字符串 dest 的指针。 这里需要注意的是: 1、src字符串必须以 '\0' 结束。 2、目标空间必须有足够的大,能容纳下源字符串的内容。 3、目标空间必须可修改。 4、不可用strcat使字符串自己给自己追加内容,会陷入死循环。 模拟实现strcat:
运行结果: 五、strstr?
????????C 库函数strstr可在字符串?haystack?中查找第一次出现字符串?needle?的位置,不包含终止符 '\0'。其中有两个参数——haystack?-- 要被检索的 C 字符串,needle?-- 在 haystack 字符串内要搜索的小字符串。 ????????若函数strstr在字符串?haystack?中找到第一次出现字符串?needle?的位置,则该函数会返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。 模拟实现strstr:
运行结果: 六、memcpy?
C 库函数memcpy从存储区?str2?复制?n?个字节到存储区?str1。最后该函数将会返回一个指向目标存储区 str1 的指针。 这其中有三个参数:str1?-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针;str2?-- 指向要复制的数据源,类型强制转换为 void* 指针;n?-- 要被复制的字节数。 这里需要注意的是: 1、这个函数在遇到 '\0' 的时候并不会停下来。 2、如果source和destination有任何的重叠,复制的结果都是未定义的。 模拟实现memcpy:
运行结果: 七、memmove
?C 库函数memmove从?str2?复制?n?个字符到?str1;虽然功能与memcpy相似,但是如果源空间和目标空间出现重叠,就得使用memmove函数处理。也就是说它和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
运行结果 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:13:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |