strcpy、memcpy、memmove的区别
来源:互联网 发布:mac eclipse 编辑:程序博客网 时间:2024/04/30 06:20
strcpy和memcpy都是标准C库函数,它们有下面特点:
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容外,还会复制字符串的结束符。
strcpy的函数原型是:char* strcpy(char* dest, const char* src);
memcpy只提供一般的内存复制,即memcpy对于需要复制的内容没有限制,因此用途更广。
memcpy的函数原型是:void *memcpy(void *dest, const char* src, size_t count);
strcpy 和 memcpy主要有以下三方面的区别:
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符串、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符串的结束符"\0”才结束,所以容易溢出。memcpy则是根据第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其它类型的数据是用memcpy。
memcpy 和 memmove 都是C语言中的库函数,在库函数 string.h中,其原型相似,它们都是从src所指向的内存中复制count个字节到dest所指内存中。并返回dest的值。
当源内存区域 和 目标内存区域无交叉重叠时,两者的结果是一样的,但如果有交叉呢?
memcpy是从src的其实部分开始复制,所以虽然第一种情况下没有问题,但如果遇到第二种情况,则会发生错误,交叉部分的src内容就会被覆盖掉了。
而memmove则由于采用不同的复制机制,所以可以正确处理第二种情况。
void *memmove(void *dst,const void *src,int n){ char *dp = (char *)dst; char *sp = (char *)src; assert((src!=0)&&(dst!=0)&&(n>0));//not null //非重叠 //dp < sp //dp > (sp+n) if(sp>dp||(sp+n)<dp) { while(n--) *(dp++) = *(sp++); *dp = '\0'; } else if(sp<dp)//重叠 (此时条件 sp<dp<(sp+n))如果sp==dp则快速的返回 {//反向拷贝 sp += n; dp += n; *dp = '\0'; while(n--) *(--dp) = *(--sp); } return dst;}
- strcpy memcpy memmove的区别
- strcpy、memcpy、memmove的区别
- strcpy、memcpy、memmove的区别
- strcpy、memcpy、memmove的区别
- strcpy、memcpy、memmove的区别
- strcpy, memcpy和memmove的区别
- [荐]memcpy、memmove、strcpy的区别?
- strcpy、memcpy、memmove的区别及实现
- strcpy/memcpy/memmove三者的区别
- strcpy/memcpy/memmove的区别 【转】
- memcpy、memmove、memset、strcpy的区别
- memcpy 和 memmove 的区别,memcpy 和 strcpy 的区别
- strcpy,memcpy和memmove区别
- strcpy/memcpy/memmove的实现
- strcpy/memcpy/memmove的实现
- C的memcpy,memmove和strcpy的区别是什么?
- 转:C/C++:memmove、memcpy、strcpy三者的区别
- 转:C/C++:memmove、memcpy、strcpy三者的区别
- UI高级第五课 网络通信——iOS学习连载33
- Ios66详解之地图定位失败错误信息处理
- 省市区3个tableView联动实现
- 手机应用推荐
- Python学习之正则表达式
- strcpy、memcpy、memmove的区别
- laravel 5.0 artisan 命令列表(中文简体)
- GestureRecognizer手势
- C++成员函数和构造函数
- Spring事务详解
- UVA OJ部分题目代码
- 数据结构之链栈
- 重写hashCode与equals方法的作用
- Spark开发指南