模拟库函数(strcpy,strcat,strchr,strstr,strcmp,memcpy,memmove)
来源:互联网 发布:怎么样加入淘宝 编辑:程序博客网 时间:2024/05/21 11:08
1.strcpy
功能:strcpy把从sorc地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
char *my_strcpy(char *dest, const char *sorc){ assert(dest && sorc); char *ret = dest; while (*dest++ == *sorc) { ; } return ret;}
2.strcat
功能:把字符串sorc连接到字符串dest后面。
char *my_strcat(char *dest, const char *sorc){ assert(dest && sorc); char *ret = dest; while (*dest++) { ; } dest--; while (*dest++ == *sorc++) { ; } return ret;}
3.strchr
功能:查找字符串string中首次出现字符ch的位置
char *my_strchr(const char *string, char ch){ assert(string); char *p = (char *)string; while (*p) { if (ch == *p) { return p; } else { p++; } } return NULL;}
4.strstr
功能:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char *my_strstr(const char *str1, const char *str2){ assert(str1 && str2); char *dest = (char *)str1; char *sorc = (char *)str2; char *s = NULL; while (*dest) { s = dest; sorc = (char *)str2; while (*s == *sorc && *s && *sorc) { s++; sorc++; } if (!*sorc) { return dest; } else { dest++; } } return NULL;}
5.strcmp
功能:比较两个字符串大小(按ASCII值大小逐个字符相比较),设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1 < str2,则返回负数;
若str1 > str2,则返回正数。
int my_strcmp(const char *str1, const char *str2){ assert(str1 && str2); int ret = 0; while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1 && *str2) { str1++; str2++; } if (ret > 0) { return 1; } else if (ret < 0) { return -1; } return ret;}
6.memcpy
功能:从源sorc所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
void *my_memcpy(void *dest, const void *sorc, size_t n){ assert(dest && sorc); void *ret = dest; while (n--) { *(char *)dest = *(char *)sorc; dest = (char *)dest + 1; sorc = (char *)sorc + 1; } return ret;}
7.memmove
功能:从sorc拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后sorc内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
void *my_memmove(void *dest, const void *sorc, size_t count){ assert(dest && sorc); void *ret = dest; if (dest <= sorc || (char *)dest >= (char *)sorc + count) //low to high { while (count--) { *(char *)dest = *(char *)sorc; dest = (char *)dest + 1; sorc = (char *)sorc + 1; } } else //high to low { (char *)dest = (char *)dest + count - 1; (char *)sorc = (char *)sorc + count - 1; while (count--) { *(char *)dest = *(char *)sorc; dest = (char *)dest - 1; sorc = (char *)sorc - 1; } } return ret; }
阅读全文
1 0
- 模拟库函数(strcpy,strcat,strchr,strstr,strcmp,memcpy,memmove)
- 模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove
- 模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
- 模拟实现C语言库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
- 字符串函数模拟实现(strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove)
- 模拟实现C库函数:strchr、strcmp、strstr、memcpy和memmove
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- strcpy,strcmp,strstr,strcat,memcpy,memmove的模拟实现
- 模拟实现strlen,strcpy,strcat,strcmp,strstr,memcpy,memmove
- 模拟实现strcpy ,strstr,strcat,strcmp,memcpy,memmove
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr,
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
- 模拟实现函数库中的各种常用函数,1实现strcpy 2.实现strcat 3.实现strstr 4.实现strchr 5.实现strcmp 6.实现memcpy 7.实现memmove
- 隐式转换和显示转换
- Redis集群的搭建
- 排序:插入排序与希尔排序
- vector中的resize与reserve
- 1. Two Sum
- 模拟库函数(strcpy,strcat,strchr,strstr,strcmp,memcpy,memmove)
- 第十二周周四总结
- NYOJ-Binary String Matching
- (转)比特币基金难产 区块链基金成首发
- IDEA使用MAVEN搭建SSM(IDEA+Maven+Spring+Spring MVC+Mybatis)
- Ubuntu系统NCNN框架入门指南
- poj3104二分
- 脱壳学习笔记(二)
- Android实战——AndFix的使用与源码分析