El principio y realización de las funciones memcpy y memmove de la serie de algoritmos prácticos del lenguaje C

Mira el código directamente

#include<stdio.h>
#include<string.h>
/*返回指向pDest的指针*/
void* MemCopy(void* pDest, const void* pSrc, int nCount)
{
    
    
	char* p = (char*)pDest;
	char* p1 = (char*)pSrc;
	while (nCount--)
		*p++ = *p1++;
	return pDest;
}
/*返回指向pDest的指针,分有重叠和无重叠两种情况*/
void* MemMove(void* pDest, const void* pSrc, int nCount)
{
    
    
	char* dest = (char*)pDest;
	char* src = (char*)pSrc;
	if (dest > src && dest < src + nCount)
	{
    
    
		//有重叠
		src += nCount;
		dest += nCount;
		while (nCount--)
			*--dest = *--src;
	}
	else
	{
    
    
		//无重叠
		while (nCount--)
			*dest++ = *src++;
	}
	return pDest;
}

char str1[7] = "aabbcc";

int main(void)
{
    
    
	printf("The string: %s\n", str1);
	MemMove(str1 + 2, str1, 4);
	printf("New string: %s\n", str1);

	strcpy_s(str1, sizeof(str1), "aabbcc");   // reset string

	printf("The string: %s\n", str1);
	memmove(str1 + 2, str1, 4);
	printf("New string: %s\n", str1);
}

Resultado de salida

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/wlwdecs_dn/article/details/111062130
Recomendado
Clasificación