您的位置:首页 > 编程语言 > C语言/C++

C语言中memcpy、memset和memmove的实现

2011-10-15 00:19 537 查看
1) memcpy():

主要实现的是两段内存的复制

2) memset():

实现对一段内存进行初始化

3)memmove():

主要是实现一段内存的内容移动到另一段内存。

实现的代码如下:#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

void* Mymemcpy(void* dest, const void* src, unsigned int size)
{
unsigned int i = 0;
char* p = (char*)dest;
char* q = (char*)src;
assert(dest != NULL && src != NULL);
if(size > 0)
{
while((i < size) && (*(p + i) = *(q + i)))
i++;
return dest;
}
return NULL;
}

void* Mymemset(void* dest, int ch, unsigned int size)
{
unsigned int i = 0;
unsigned char* p = (unsigned char*)dest;
while((i < size) && (*(p + i) = ch))
{
i++;
}
return dest;
}

void* Mymemmove(void* dst, const void* src, unsigned int count)
{
void *ret = dst;
if(dst <= src || (char*)dst >= ((char*)src + count))
{
while(count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else
{
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while(count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst - 1;
src = (char*)src - 1;
}
}
return(ret);
}
int main()
{
int size;
char* p = (char*)malloc(10 * sizeof(char));
char* dst = (char*)malloc(5 * sizeof(char));
Mymemset(p,'a',10);
puts(p);

Mymemmove(dst, p, 5);
puts(dst);

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 dst c null system