题目:
自己定义一个函数,实现my_memcpy和my_memmove函数。
题目分析:
memcpy函数主要实现的是内存的拷贝,函数接受任意类型的参数,并且有拷贝个数的限制,函数与strcpy函数在功能上有相似点,也有不同点。memmove函数在memcpy函数的基础上解决了内存重叠的问题。下面是memcpy和memmove函数的实现:
my_memmove函数:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h> //实现内存拷贝函数 void *my_memcpy(void *p1, const void *p2, size_t count) //count为内存的大小(所拷贝的字节数) { assert(p1); assert(p2); char *dst = (char *)p1; //将p1、p2强制类型转换为字符指针类型 char *str = (char *)p2; while (count--) { *dst++ = *str++; } return p1; } int main() { char dst[10] = {0}; char str[] = "abcdef"; my_memcpy(dst, str, 4); printf("%s\n", dst); system("pause"); return 0; }
my_memmove函数:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h> //实现内存移动 void *my_memmove(void *p1, const void *p2, size_t count) { assert(p1); assert(p2); char *dst = (char *)p1; char *str = (char *)p2; if (*dst > *str && *dst < *(str + count)) { while (count--) //从前往后拷贝 { *(dst + count) = *(str + count); } } else { while (count--) //从后向前拷贝 { *dst++ = *str++; } } return dst; } int main() { char dst[10] = "abcdefg"; char str[] = "def"; my_memmove(dst, str, 2); printf("%s\n", dst); system("pause"); return 0; }
时间: 2024-10-27 02:29:39