【C语言】 字符串的内存拷贝处理函数
来源:互联网 发布:2017微信数据报告 编辑:程序博客网 时间:2024/05/21 10:39
这篇博文我主要是想写一下函数库中的memcpy函数,
对于字符串来说,我们运用字符串<string.h>中的str类别的函数,但是我们还有一些关于内存的拷贝函数。他们操作的对象是内存,然后可以接受任何类型的数据进行拷贝。
这个是<memory.h>里面的memcpy,然后我们一起查看一下MSDN看一看他的原型:
void *memcpy(void *dest,const void *src,size_t count);
与strcpy不同的就是添加了第三个参数,确定操作的字节数,然后参数类型还有返回类型都是void*
,这表示他可以拷贝任意类型的数据。
然后我们看一下实现:
memcpy:
void *my_memcpy(void *str,const void *Dstr,int count) //从内存地址开始改变,并确定改变长度,所以用万能类型去接受{ char *pstr = (char *)str; char *pDstr = (char *)Dstr; assert((str!=NULL) && (Dstr != NULL)); if(str == Dstr) //位置相同情况下直接返回需要改变的 return (char *)Dstr; while(count-- > 0) { *pstr++ = *pDstr++; } return str;}
然后会出现一个问题,如果我们拷贝的数据中Dstr的起始位置在STR操作之间,那么在改变str时会出现副作用,将导致我们的拷贝结果不正确,所以我们应该考虑到会覆盖的情况。在函数库中有一个memmove函数。
memmove:
void *my_memmove(void *pst,const void *Dpst,int size){ void *p = pst; char *pstA = (char *)pst; char *pstB = (char *)Dpst; assert((pst != NULL) &&(Dpst != NULL)); if(pstB<pstA< pstB+size) { while(size--) { *(pstA+size) = *(pstB+size); } } else { while(size--) { *pstA++ = *pstB++; } } return p;}
就是遇到被拷贝的空间起始处在拷贝空间中,将会遇到拷贝内存覆盖的现象。在这种情况下我们将考虑从尾部进行拷贝。所以进行了判断。
本文出自 “剩蛋君” 博客,请务必保留此出处http://memory73.blog.51cto.com/10530560/1697227
0 0
- 【C语言】 字符串的内存拷贝处理函数
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- 【C语言】 字符串操作函数及内存拷贝函数归总
- 内存拷贝函数的C语言实现
- 字符串拷贝与内存拷贝的区别 c语言--memcpy()
- C语言面试题---字符串拷贝函数与内存拷贝函数
- C语言:重写strcpy函数,拷贝字符串的内容
- 用C语言打造自己的字符串拷贝函数
- C语言实现字符串拷贝函数的几种方法
- C语言字符串处理及内存管理函数
- c语言中常字符串处理的函数
- C语言中处理字符串的函数
- C 语言 字符串处理函数的实现
- C语言--字符串处理函数的使用
- C语言中处理字符串的函数
- C语言常见的字符串处理函数
- c语言常见的字符串处理函数
- C语言字符串处理函数的实现
- 【C语言】学生成绩链表的录入
- 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行。
- 【C语言】冒泡排序与回文判断
- 【C语言】把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。
- 【C语言】strlen的三种实现方法,strcmp,strcat,strcpy
- 【C语言】 字符串的内存拷贝处理函数
- java中volatile关键字的含义
- 【C语言】主函数的参数探幽
- CSS3实战1-文本属性text-shadow的用法
- 【c语言】输出一组数中有2个出现了1次的数
- 引用CDN内容的方法总结
- 【c++】vector用法
- 【C语言】打印1到n位数。
- 【C语言】快速排序优质算法的动态显示和字符串的快排