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