首页 > 其他 > 详细

一些常用函数模拟实现

时间:2015-12-02 01:06:42      阅读:229      评论:0      收藏:0      [点我收藏+]

我们库函数中提供给我们很多函数,我们虽然不需要自己去实现这些函数,但是我认为自己亲自去实现一下这些函数对我们有很大的好处。

我们可以根据自己的想法实现这些函数的功能,然后再看一下库里面是怎么实现它们的,比较一下,看看函数的实现方式的异同之处,这样我们可以找出自己的不足之处,学习库函数的实现思维,帮助我们提升编程能力。

下面是一些函数的实现:

 

strstr函数的实现:

char *my_strstr(const char *str1, const char *str2)
{
assert(str1);
assert(str2);

char *pstr1 = str1;
char *p1 = NULL;
char *p2 = NULL;
while (*pstr1)
{
p1 = pstr1;
p2 = str2;

while ((*p1) && *p1 == *p2)
{
p1++;
p2++;
if (*p2 == ‘\0‘)
return pstr1;
}
pstr1++;
}
return NULL;
}

 

strcpy的实现:

char *my_strcpy(char *dst, const char *src)
{
assert(dst);
assert(src);
char *ret = dst;
while (*dst++ = *src++)
{
;
}
return ret;
}

 

strcat函数:
char *my_strcat(char *dest, const char *src)
{
assert(dest);
assert(src);
char *ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}

strcmp函数:

int my_strcmp(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
while (*str1 == *str2)
{
if (*str1==‘\0‘)
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}

strlen函数在上一篇博客中,(strlen的三种实现方法)

 

memcpy函数:

void* my_memcpy(void *dest, const void *src,int size)
{
assert(dest);
assert(src);

void *ret = dest;
char *p1 = (char *)dest;
char *p2 = (char *)src;

while (size--)
{
*p1++ = *p2++;
}
return ret;
}

memmove函数:

void* my_memmove(void *dest, void const *src, int count)
{
assert(dest);
assert(src);

void *ret = dest;
char *p1 = (char *)dest;
char *p2 = (char *)src;

if (p1 > p2 && p1 < p2 + count)
{
while (count--)
{
*(p1 + count) = *(p2 + count);
}
}
else
while (count--)
{
*p1++ = *p2++;
}

return ret;
}

一些常用函数模拟实现

原文:http://haipi.blog.51cto.com/10778780/1718663

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!