1.my_strcpy
字符串拷贝:
char *my_strcpy(char *dst ,char const *src)
{
assert(dst!=NULL); //断言 dst不为空指针
assert(src!=NULL);
while(*dst++=*src++)
{
;
}
return dst;
}
2.my_strcat
字符串连接:
char *my_strcat(char *dst,char const*src)
{
char *str = dst;
assert(dst!=NULL);
assert(src!=NULL);
while(*dst)
{
dst++;
}
while(*src)
{
*dst = *src;
dst++;
src++;
}
return str;
}
3.my_strstr
查找子串:
char const*my_strstr(char const *str,char const*src)
{
assert(str!=NULL);
assert(src!=NULL);
if(*src)
return NULL;
while(*str)
{
char const *l = src;
char const *p = str;
while(*p == *l && *p && *l)
{
p++;
l++;
}
if(*l)
return p;
str++;
}
return NULL;
}
4.my_strchr
查找字符串中的字符:
char const*my_strchr(char const *str,char c)
{
assert(str!=NULL);
while(*str)
{
if(*str == c)
return str;
else
str++;
}
return NULL;
}
5.my_memcpy
内存拷贝:
void *my_memcpy(void *dst,void *src,unsigned int count)
{
void *ret = dst; //count 为拷贝的字节
while(count--)
{
*(char *)dst = *(char *)src; //必须强制类型转换
dst = (char *)dst +1;
src = (char *)src +1;
}
return ret;
}
6.my_memove
内存移动:
void *my_memove(void *dst,void *src,unsigned int count)
{
void *ret = dst;
while(count--)
{
if(dst<src) //如果目的地的内存在源的左边,从前往后拷贝
{
*(char *)dst = *(char *)src;
dst = (char *)dst +1;
src = (char *)src +1;
}
else //如果目的地的内存在源的右边,从后往前拷贝
{
*((char *)dst+count) = *((char *)src+count);
}
}
return ret;
}