面試題目整理:實現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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章