实现memcpy和memmove函数
2015-11-20 21:54
253 查看
题目:
自己定义一个函数,实现my_memcpy和my_memmove函数。
题目分析:
memcpy函数主要实现的是内存的拷贝,函数接受任意类型的参数,并且有拷贝个数的限制,函数与strcpy函数在功能上有相似点,也有不同点。memmove函数在memcpy函数的基础上解决了内存重叠的问题。下面是memcpy和memmove函数的实现:
my_memmove函数:
my_memmove函数:
自己定义一个函数,实现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; }
相关文章推荐
- 解析thinkphp中的M()与D()方法的区别
- mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations
- mysql 执行状态分析 show processlist
- Changing DAG & DAG members IP addresses
- Event ID 8010:邮件队列 MSExchange Transport
- Yet another MongoDB Map Reduce tutorial [一篇英文的mongodbMopreduce 文章 推荐一下]
- IMSL在Intel visual fortran下的安装和配置
- 用Pillow代替PIL的一些问题
- 网易公开课讲义3 Generalized Linear Models 笔记
- SpringMVC+MyBatis 整合遇到错误 Configuration problem: Unable to locate Spring NamespaceHandler for XML
- There is no Action mapped for namespace / and action name toList.
- Netra基于Rdk平台的软件框架设计
- \u003C>_<"
- Regular Expression Matching
- VC C运行时库(CRTL)的几个版本及用法
- Java面试笔试题(高级部分1)
- vi/vim显示中文字符并且去掉^M的方法
- Regular Expression Matching
- Java+tomcat+Eclipse环境的配置
- MVC5:使用Ajax和HTML5实现文件上传功能