| |
|
开发:
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语言字符串函数及内存函数的模拟实现和原理 |
目录 ?一、求字符串长度1.strlen()函数1.函数功能? ? 计算字符串长度的函数,返回类型是size_t,即无符号整型。 2.函数原形? ?size_t strlen(const char* str); 3.模拟实现代码:
二、长度不受限制的字符串操作函数1.strcpy()函数1.函数功能? ? 拷贝字符串(包括'\0'),读到'\0'就停止拷贝。 2.函数原形? ?char * strcpy ( char * destination, const char * source ); 3.模拟实现代码:
2.strcat()函数1.函数功能? ? 实现字符串的连接。 2.函数原形char* strcat(char* destination, const char* source); 3.模拟实现代码:
3.strcmp()函数1.函数功能? ? 比较两个字符串的大小。 ? ? 比较的是两个字符串对应字符的ASCII码值,第一个字符串字符大于第二个字符串中对应字符时函数返回大于0的数,小于时返回小于0的数,等于时返回0。 2.函数原形? ??int strcmp ( const char * str1, const char * str2 ); 3.模拟实现代码:
三、长度受限制的字符串操作函数1.strncpy()函数1.函数功能? 拷贝字符串(前n个字符(不包括'\0')),将前n个字符拷贝完成后,将目标空间的第n+1个字符置为'\0',以终止拷贝。 2.函数原型? ?char * strncpy ( char * destination, const char * source, size_t num ); 3.模拟实现代码:
2.strncat()函数1.函数功能? ? 将源字符串的前n个字符连接到目标字符串,其后加'\0'结束字符串。 2.函数原形? ??char * strncat ( char * destination, const char * source, size_t num ); 3.模拟实现代码:
3.strncmp()函数1.函数功能? ? 比较两个字符串的前n个字符。 2.函数原形? ??int strncmp ( const char * str1, const char * str2, size_t num ); 3.函数模拟代码:
八、字符串查找1.strstr()函数1.函数功能? ? 找到字符串中的子字符串,并返回第一次出现的子字符串的首地址。 2.函数原形? ??const char * strstr ( const char * str1, const char * str2 ); ? ? ? ? ? ? ? char * strstr ( char * str1, const char * str2 ); 3.模拟实现代码:
2.strtok()函数1.函数功能? ? 截断字符串(按标识符截断)。 2.函数原形? ?char * strtok ( char * str, const char * delimiters ); 3.实现原理代码:
运行结果: 解释: ? ? strtok()函数传参的时候,第一个参数为截断字符串的起始地址。第一次传参的时候传所需截断字符串的首地址;从第二次开始,因为第一次截断时strtok()?记住了标识符的下一个字符的地址,所以只需传空指针NULL;如需截断另一个新的字符串,只需将新字符串的地址传给第一个参数即可。 四、错误信息报告1.strerror()函数1.函数功能? ? 获取指向错误消息字符串的指针(把错误码转化为错误信息)。 2.函数原形char * strerror ( int errnum ); 3.实现原理代码:
运行结果: 五、内存操作函数1.memcpy()函数?1.函数功能? ?内存拷贝(一般编译器不支持目标空间和被拷贝的部分有重叠),因拷贝内容的类型不确定,故以单个字节为单位进行拷贝,返回目标空间的起始地址。 2.函数原形? ??void * memcpy ( void * destination, const void * source, size_t num ); 3.模拟实现代码:
函数原理: ? ? void*可以接受任意类型变量的地址,因为变量大小的不确定性,将指针强转为char*(指针类型决定解引用可以访问的空间大小,char*解引用访问一个字节大小的空间),然后一个字节一个字节的拷贝。 2.memmove()函数1.函数功能? ? 内存拷贝(与memcpy()函数相似,memmove()函数能处理目标空间和被拷贝空间有重叠的情况)。 2.函数原形? ??void * memmove ( void * destination, const void * source, size_t num ); 3.模拟实现代码:
? ?函数原理: ? ? 处理目标空间和被拷贝空间有重叠的时候有两种情况,第一种,目标空间在前,被拷贝空间在后,从前往后拷贝(与不重叠的情况拷贝顺序相同);第二种,目标空间在后,被拷贝空间在前,从后往前拷贝。 3.memset()函数1.函数功能? ? 将目标空间的前num个字节的空间都赋值为value。 2.函数原形? ? void * memset ( void * ptr, int value, size_t num ); 3.模拟实现代码:
运行结果: 4.memcmp()函数1.函数功能? ? 比较两个内存空间内对应内容的大小,以单个字节为单位进行比较,比较两个指针指向空间前num个字节的内容,与strcmp()函数不同的是,遇到'\0'也不会停止比较。 2.函数原形? ??int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 3.模拟实现代码:
运行结果: 这篇文章写到这里就结束啦,看到错误的话烦请指正,谢谢大家!!! |
|
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 9:46:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |