几个库函数实现 (memcopy等)

 

几个库函数实现 (memmove memcopy...)  

2011-01-24 17:41:43|  分类: 每日一题 |  标签: |字号 订阅

库函数的手册中明确说了 memmove考虑内存区域重叠的情况而memcpy不考虑,所以memcpy实现起来比较简单。一般面试者要求实现 memcpy的时候都是看你考虑的是否全面。下面是一个memmove的实现:
  1. void *memmove(void *dest, void const *src, size_t n)  
  2. {  
  3.         register char *dp = dest;  
  4.         register char *sp = dest;  
  5.         if (dp < sp)  
  6.         {  
  7.                  while(n-- > 0)  
  8.                     *dp++ = *sp++;  
  9.         }  
  10.         else  
  11.         {  
  12.                  // we should do the copy reversely  
  13.                 dp += n;  
  14.                 sp += n;  
  15.                 while (n-- > 0)  
  16.                         *--dp = *--sp;  
  17.         }  

 
再来看Linux中实现:

void *memcpy(void *dest, const void *src, size_t count)
{
   char *tmp = dest;
   const char *s = src;

   while (count--)
         *tmp++ = *s++;
   return dest;
}

strcmp实现
int  strcmp (    const char * src,      const char * dst       )
{
        int ret = 0 ;

        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                ++src, ++dst;

        if ( ret < 0 )
                ret = -1 ;
        else if ( ret > 0 )
                ret = 1 ;

        return( ret );
}

strcpy实现
char* strcpy(char* dest, const char* src)
{
	char* tmp = dest;
	while ((*tmp++ = *src++) != '\0')
		;
	return dest;

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值