strcpy和memcpy的实现

进来很多面试题都会考到strcpy和memcpy的实现,所以在学习之余我将其做一整理:

1,首先是memcpy:

void* memcpy(void *dst, const void *src, size_t count)      
{      
    //安全检查  
    assert( (dst != NULL) && (src != NULL) );      
	
    unsigned char *pdst = (unsigned char *)dst;      
    const unsigned char *psrc = (const unsigned char *)src;      
	
    //防止内存重复  
    assert(!(psrc<=pdst && pdst<psrc+count));      
    assert(!(pdst<=psrc && psrc<pdst+count));      
	
    while(count--)      
    {      
        *pdst = *psrc;      
        pdst++;      
        psrc++;      
    }      
    return dst;      
} 

请注意:void指针可以就受任何类型,但是将void指针赋值给其它变量时必须进行类型转换如上,上面问题中的唯一陷阱就是 地址重复。

2,strcpy,strcpy比较简单,在程序中我们省去断言。下面给出四种大家看看那个不正确微笑

void strcpy1(char *s,char *t)
{
    while((*s++ = *t++) != '\0');
}

void strcpy2(char *s,char *t)
{
	while(*s++ = *t++);
	
} 
void strcpy3(char *s,char *t)
{
	while(*t)
	{
		*s = *t;
		s++;
		t++;
	}
}

void strcpy4(char *s, char *t)
{
	while( *s = *t )
	{
		s++;
		t++;
	}
}
  
其中 strcpy3有问题,你看出来了吗?? 微笑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值