概述
1。
模拟实现memcpy (内存拷贝)(拷贝字符串时不会自动加’ ’)
注: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 :%sn",pp);
printf("memcpy :%sn",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 :%sn",pp);
return 0;
}
最后
以上就是单身诺言为你收集整理的模拟实现memcpy,memmove的全部内容,希望文章能够帮你解决模拟实现memcpy,memmove所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复