strcpy函数与memcpy函数的区别及其函数实现
2012-09-03 16:24
344 查看
先看函数实现:
显然两函数的原型都不一样:void *memcpy(void * ,const void * ,size_t )与char *strcpy(char * ,const char * );
1、函数的形参类型,个数返回值都不一样;
2、strcpy只能实现字符串的拷贝,以‘\0’作为结束标志,而memcpy可以拷贝很多类型,并以拷贝的字节数为拷贝结束标志;
3、memcpy有一定的处理内存覆盖问题能力,不过也不太好,而strcpy则无处理内存覆盖的能力。memmove()很好的处理内存覆盖。
显然两函数的原型都不一样:void *memcpy(void * ,const void * ,size_t )与char *strcpy(char * ,const char * );
void *memcpy(void *dst,const void *src,size_t count) { if(dst==NULL || src==NULL) return NULL; if(cout<0) return NULL; char *pDst=(char *)dst; char *pSrc=(char *)src; if(pDst<pSrc && pDst+cout>pSrc) { size_t i=cout-1; while(i>=0) { pDst[i]=pSrc[i]; i--; } } else { size_t i=0; while(i<cout) { pDst[i]=pSrc[i]; i++; } } return dst; } char *strcpy(char *dst,const char *src) { if(dst==NULL || src==NULL) return NULL; char *p=dst; while(*p++=*src++) ; return dst; }
1、函数的形参类型,个数返回值都不一样;
2、strcpy只能实现字符串的拷贝,以‘\0’作为结束标志,而memcpy可以拷贝很多类型,并以拷贝的字节数为拷贝结束标志;
3、memcpy有一定的处理内存覆盖问题能力,不过也不太好,而strcpy则无处理内存覆盖的能力。memmove()很好的处理内存覆盖。
相关文章推荐
- strlen函数 strcpy函数 strcmp函数 strstr函数 strcat函数 memcpy函数 memmove函数 以及字符串反转函数的实现
- 【分析函数】使用分析函数LAST_VALUE或11g LAG实现缺失数据填充及其区别
- 【C语言】memcpy函数和memmove函数的实现与区别
- strcpy函数与memcpy函数(区别及实现)
- strcpy函数与memcpy函数(区别及实现 )
- strcpy和memcpy函数的实现及其区别
- strcpy函数与memcpy函数(区别及实现)
- 运用指针模拟实现一些代码以及memcpy函数与memmove函数的区别
- memcpy,memmove函数实现及区别
- 第七周 项目二:成员函数、友元函数、一般函数之区别(实现三个版本的求两点间距离)
- memmove和memcpy函数的区别及实现
- c++远征之多态篇——虚函数及其实现原理
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数实现
- php isset函数对比empty函数之间的区别及其使用方法
- Effective C# 原则20:明辨接口实现和虚函数重载的区别
- 多线程实现的两种方式及其区别
- 字符串操作函数的使用及其实现
- JavaScript 函数惰性载入的实现及其优点介绍
- C语言实现的线性表 函数形参:指针类型与变量类型的区别 (SqList *L)(SqList L)
- 明辨接口实现和虚函数重载的区别