模拟实现strstr,memcpy,memmove

xiaoxiao2021-02-28  34

模拟实现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; }

转载请注明原文地址: https://www.6miu.com/read-34195.html

最新回复(0)