strcpy和memcpy的实现

函数strcpy

字符串拷贝函数,原型:

char *strcpy(char* dest, const char *src);

从src逐字节拷贝到dest,直到遇到'\0'结束,因为没有指定长度,可能会导致拷贝越界,造成缓冲区溢出漏洞,安全版本是strncpy函数。

自己写strcpy:

 char * strcpy(char * strDest,const char * strSrc)
{
    if ((strDest==NULL)||strSrc==NULL))                     
       return NULL;    
    char * strDestCopy=strDest; 
    while ((*strDest++=*strSrc++)!='\0'); 
    *strDest = '\0';
    return strDestCopy;
}

函数memcpy

从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。

void  *memcpy(void *s1,  const void *s2,  size_t  n);

函数memcpy返回s1的值。

自己写memcpy:

void * memcpy(void *dst, void *src, int num){
	if (dst == NULL || src == NULL || num <= 0)
		return NULL;
	char *pdst = (char *)dst;
	char *psrc = (char *)src;
	if (psrc < pdst&&pdst < psrc + num){
		pdst = pdst + num - 1;
		psrc = psrc + num - 1;
		while (num--){
			*pdst = *psrc;
			pdst--;
			psrc--;
		}
	}
	else{
		while (num--){
			*pdst = *psrc;
			pdst++;
			psrc++;
		}
	}
	return dst;
}
posted @ 2020-07-11 17:00  拉里拉里啦啦  阅读(200)  评论(0编辑  收藏  举报