本文主要是介绍模拟库函数(strcpy,strcat,strchr,strstr,strcmp,memcpy,memmove),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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; }
这篇关于模拟库函数(strcpy,strcat,strchr,strstr,strcmp,memcpy,memmove)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!