C实现字符操作函数,strcpy, strcat, strcmp, memcpy

strcpy的实现

char *strcpy(char *strDest, const char *strSrc)
{
    assert((strDest!=NULL) && (strSrc !=NULL));
    char *address = strDest;
    while( (*strDest++ = * strSrc++) != '\0' ) 
          NULL;
    return address;
}

strcat的实现

char* strcat(char *str1,char *str2)  
{
	asser((str!=NULL) && (str2!=NULL));
	char* tempt = str1;  

	while(*str1++!='\0')   

	while(*str2!='\0')  
	{  
		*str1++ = *str2++;
	}  
	*str1 = '\0';  
	
	return tempt;  
}

strcmp的实现

int strcmp(const char* str1, const char* str2)  
{  
	assert((str1 != NULL) && (str2 != NULL);  
	int ret = 0;  
	while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2))  
	{  
		str1++;  
		str2++;  
	}  
	if(ret > 0)  
	{  
		return 1;  
	}  
	else if (ret < 0)  
	{  
		return -1  
	} 
	
	return 0;  
}

memcpy的实现

void* memcpy(void *dest , const void* src , size_t count)    
{    
    assert( (dest != NULL) && (src != NULL));     //安全检查    
    assert(count > 0);
    char* psrc = (char *)src;
    char* pdest = (char *)dest;
    while(count--)    
    { 
        *pdest++ = *psrc++;    
    } 
    return dest; 
}

这里的memcpy有两个问题

1.按char类型copy,效率太低,想想是否按指针类型别的方式拷贝(考虑内存对齐的问题)

2.没有考虑dest与src地址有重叠的问题

现在没时间,后面有时间再改进!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Overboom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值