概述
//模拟实现memcpy;
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <assert.h>
void* my_memcpy(void* dst,const void* src, int count)
{
char* dst1 = (char*)dst;
const char* src1 = (const char*)src;
assert(dst != NULL);
assert(src != NULL);
while(count--)
{
*dst1 = *src1;
dst1++,src1++;
}
return dst;
}
int main()
{
char a[] ="abcde";
char b[20];
my_memcpy(b, a, sizeof(a));
printf("%sn",b);
system("pause");
return 0;
}
展示结果如下:
//模拟实现memmove;
我们应该考虑内存重叠问题,可分为两种情况,一种是是从右向左拷(即src<dst && dst<dst+sizeof(a)),另一种是从左往右拷.
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void *my_memmove( char * dst, const char *src, int count)
{
assert(dst != NULL);
assert(src != NULL);
if (src < dst && dst < (dst + count))
{
char* dst1 = (char*)dst + count - 1;
const char* src1 = (char*)src + count - 1;
while(count--)
{
*dst1-- = *src1--;
}
}
else
{
//left -> right;
char* dst1 = (char*)dst;
const char* src1 = (const char*)src;
assert(dst != NULL);
assert(src != NULL);
while(count--)
{
*dst1 = *src1;
dst1++,src1++;
}
}
return dst;
}
int main()
{
char a[] = "abcdef1234high";
char b[30];
char c[] = "abcdef1234high";
my_memmove( b, a, sizeof(a));
printf("%sn",b);
my_memmove( a, a+1, sizeof(a));
printf("%sn",a);//bcdef1234high
my_memmove( c+1, c, sizeof(c));
printf("%sn",c);//aabcdef1234high
system("pause");
return 0;
}
展示结果如下:
最后
以上就是敏感冰淇淋为你收集整理的模拟实现 memcpy和模拟实现memmove的全部内容,希望文章能够帮你解决模拟实现 memcpy和模拟实现memmove所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复