memcpy与memmove的介绍
void * memcpy ( void * destination, const void * source, size_t num );
void * memmove ( void * destination, const void * source, size_t num );
memcpy()与memmove()都是C语言的两个库函数,他们的头文件都是string.h。他们的功能都是对内存地址进行拷贝操作的,都是将以source地址开始的num个字节长度的数据拷贝到以destination地址开始的num个字节的内存上去。
memcpy与memmove的区别
- memcpy只负责拷贝,不判断是否有内存重叠的问题,需要调用者自己进行确认。
- memmove不仅负责拷贝,其函数内部还进行了内存重叠问题的判断处理。
自己实现my_memcpy与my_memmove
在C语言面试中经常会遇到面试题,让面试者自己实现memcpy()或memmove(),并要处理内存重叠的情况。下面是我本地自己实现的memcpy()和memmove()的代码.
- my_memcpy()的实现:
void* my_memcpy(void* dest, const void* src, size_t count)
{
//判断传入指针的合法性
if (dest == NULL || src == NULL) {
return NULL;
}
//定义一个临时指针记录dst的起始地址
void* ret = dest;
while (count--) {
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
return ret;
}
验证my_memcpy()代码实现:
struct Stu {
char name[10];
int age;
};
void func_test() {
int dest[] = {
1,2,3,4,5};
int src[] = {
6,7,8,9,10};
my_memcpy(dest,src,sizeof(src));
printf("打印拷贝后dest的内容:\n");
for (int i = 0; i < (
版权声明:本文为kuang921011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。