面试题目整理:实现memcpy和strcpy,考虑内存重叠的问题

strcpy和memcpy的区别:
复制方法不同
复制的数据不同:strcpy只能复制字符串,因为判断到’0’则停止复制
而memcpy则全部都可以复制

code

#include <stdio.h>
void *MyMemCopy(void *dst,void *src,int size){
		asssert(to!=NULL && from!=NULL);
	//如果目标字符串在前面或者,原串的总长度小于分配给
	//目标字符串的位置
	//那么就不会发生重叠
	if(dst < src || src+size <= dst){
		char *d = dst;
		const char *s = src;
		while(size--){
			*d++ = *s++;
		}
	}else{//倒着复制
		char *d = dst + size -1;
		const char *s = src + size -1;
		while(size--){
			*d-- = *s--;
		}
	
	}
	d[size] = '\0';
	return d;
	
}
//要有返回的参数,为了实现链示表达式
char *MstrCpy(char *dst,const char *src){
	//如果输入不符合则提前终止
	//打印出错误
	//输入参数的合法性
	asssert(to!=NULL && from!=NULL);
	int size = strlen(dst) + 1 ;
	//如果目标字符串在前面或者,原串的总长度小于分配给
	//目标字符串的位置
	//那么就不会发生重叠
	if(dst < src || src+size <= dst){
		char *d = dst;
		const char *s = src;
		while(size--){
			*d++ = *s++;
		}
	}else{//倒着复制
		char *d = dst + size -1;
		const char *s = src + size -1;
		while(size--){
			*d-- = *s--;
		}
	
	}
	d[size] = '\0';
	return d;
}

猜你喜欢

转载自blog.csdn.net/weixin_40178954/article/details/101199954
今日推荐