1。
模拟实现memcpy (内存拷贝)(拷贝字符串时不会自动加’\0’)
注:memcpy拷贝时没有考虑到内存交叉
#include <stdio.h>
#include <string.h>
#include <assert.h>
void *my_memcpy ( void *det ,const char *src ,size_t count)
{
void *ret = det;
assert(det);
assert(src);
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char str[]="1234abc886";
char arr[20];
char *ps = NULL;
char *pp = NULL;
ps = my_memcpy(arr,str,strlen(str)+1);
pp = memcpy(arr,str,strlen(str)+1);
printf("my_memcpy :%s\n",pp);
printf("memcpy :%s\n",ps);
return 0;
}
2。
模拟实现memmove (内存拷贝)
#include <stdio.h>
#include <string.h>
#include <assert.h>
void *my_memmove ( void *det ,const char *src ,size_t count)
{
void *ret = det;
assert(det);
assert(src);
if(det <= src || ((char*)det) >= ((char*)src + count))
{
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det + 1;
src = (char*)src + 1;
}
}
else
{
det = (char*)det + count - 1;
src = (char*)src + count - 1;
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det - 1;
src = (char*)src - 1;
}
}
return ret;
}
int main()
{
char str[]="1234abc886";
char arr[20] = " ";
char *pp = NULL;
*arr = str + 4;
pp = my_memmove(arr,str,7);
printf("my_memmove :%s\n",pp);
return 0;
}