模拟实现strstr,memcpy,memmove

模拟实现strstr
#include<stdio.h>
#include<assert.h>
char *my_strstr(char *dest, char *src)
{
   char *p = NULL;
   char *s = NULL;
   assert(dest && src);
   if(*src == 0)
	   return NULL;
   while(*dest)
   {
	   p = dest;
	   s = src;
       while((*p == *s) && *s && *p)
	   {
	     
		  p++;
		  s++;
	   
	   }
       
		if(*s == '\0')
			return dest;
		 dest++;
	
   }
		return NULL;
}
   
   

int main()
{
    char arr1[] = "abcdeffdef";
	char arr2[] = "def";
	char *ret = my_strstr(arr1, arr2);
	printf("%s\n",ret);
	return 0;
}
模拟实现memcpy
#include<stdio.h>
void my_memcpy(void *dest, const void *src, size_t count)
{
	char *ret = dest;
	while(count--)
	{
	   *(char *)dest = *(char *)src;
	  dest = (char *)dest +1;
      src = (char *)src +1;
	}
	return ret;
	

}
    


int main()
{
	int i = 0;
	int arr1[20];
	int arr2[] = {1, 2, 3, 4, 5};
    my_memcpy(arr1, arr2, 16);
	for(i=0;i<4;i++)
		printf("%d ",arr1[i]);
	return 0;
}

模拟实现memmove

考虑两种情况:

1、内存不重叠--->顺序拷贝




2、内存重叠----->逆序拷贝


#include<stdio.h>
char *my_memmove(char *dest, const char *src, size_t count)
{
    char *ret = dest;
	char *pdest  = (char *)dest;
	char *psrc = (char *)src;
	if(pdest < psrc || pdest > (psrc+count))  //正常情况下从前向后拷贝
	  {
		  while(count--)
		  {
	             *pdest = *psrc;
	             pdest++;
	             psrc++;
		  }
	  }
	 else                 //当出现内存覆盖时从后向前拷贝
	   {
	      pdest = pdest+count-1;
              psrc = psrc+count-1;
		  while(count--)
		  {
		    *pdest = *psrc;
	            pdest--;
	            psrc--;
		  }
	   }
	
	
	return ret;
}





int main()  
{  
    char arr[10]="abcdefg";  
    char arr0[10]="abcdefg";  
    char arr1[10]={0};  
    my_memmove(arr+2,arr,4);  
    my_memmove(arr1,arr0,4);  
    printf("内存覆盖情况:%s\n",arr+2);  
    printf("正常情况:%s\n",arr1);  
    system("pause");  
    return 0;  
}  




猜你喜欢

转载自blog.csdn.net/loved_computer/article/details/76735215