Disposition des sujets d'entrevue : implémenter memcpy et strcpy, considérer le problème du chevauchement de mémoire

La différence entre strcpy et memcpy :
la méthode de copie est différente,
les données copiées sont différentes : strcpy ne peut copier que des chaînes, car il arrête de copier lorsqu'il juge '0'
, tandis que memcpy peut tout copier

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;
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40178954/article/details/101199954
conseillé
Classement