快捷搜索:  汽车  科技

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)顺带一提,自定义类型的数据即可:void *memcpy(void *memTo const void *memFrom size_t size) { if ((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效 return NULL; char *tempTo = (char *)memTo; //保存memTo首地址 while (size-- > 0) //循环size次,复制memFrom的值到memTo中 *tempTo = *((char *)memFrom) ; return memTo; }测试结果:char * strcpy(char * dest constchar * src)char * strcpy(char * dest const char *

前言

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(1)

本文主要讲解C语言的常用的一些函数的自我实现,经常出现在编程笔试题中,实现过程简单,对于学习C语言的同学来说也是很有帮助的。主要有以下三个函数:

  1. strcpy:char * strcpy(char * dest const char * src);
  2. memcpy:void *memcpy(void *memTo const void *memFrom size_t size);
  3. memmove:void *memmove(void *dst const void *src size_t n);
函数介绍

可能大家都知道这三个函数都可以实现拷贝效果,在这里主要是讲下他们之间的区别,strcpy 和 memcpy主要有以下三方面的区别:      

  1. 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符串、整型、结构体、类等。      
  2. 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符串的结束符"\0”才结束,所以容易溢出。memcpy则是根据第3个参数决定复制的长度。      
  3. 用途不同。通常在复制字符串时用strcpy,而需要复制其它类型的数据是用memcpy

memcpy和memmove区别

当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。 

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(2)

代码实现

char * strcpy(char * dest constchar * src)

char * strcpy(char * dest const char * src) // 实现src到dest的复制 { if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性 { return NULL; } char *strdest = dest; //保存目标字符串的首地址 while ((*dest = *src ) != '\0'); //把src字符串的内容复制到dest下 return strdest; }

测试结果:(不考虑secondStr长度大于firstStr的问题!)

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(3)

void *memcpy(void *memTo const void *memFrom size_t size)

void *memcpy(void *memTo const void *memFrom size_t size) { if ((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效 return NULL; char *tempTo = (char *)memTo; //保存memTo首地址 while (size-- > 0) //循环size次,复制memFrom的值到memTo中 *tempTo = *((char *)memFrom) ; return memTo; }

测试结果:

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(4)

顺带一提,自定义类型的数据即可:

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(5)

void *memmove(void *dst const void *src size_t n)

void *memmove(void *dst const void *src size_t n) { char *dp = (char *)dst; char *sp = (char *)src; if(dst==NULL || src==NULL)return NULL; //非重叠 //dp < sp //dp > (sp n) if(sp>dp||(sp n)<dp) { while(n--) *(dp ) = *(sp ); } else if(sp<dp)//重叠 (此时条件 sp<dp<(sp n))如果sp==dp则快速的返回 {//反向拷贝 sp = n; dp = n; while(n--) *(--dp) = *(--sp); } return dst; }

测试结果:

c语言库函数汇总(C语言专题之三大拷贝库函数的实现)(6)

尾言

文章都是手打原创,每天最浅显的介绍C语言、C ,windows知识,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程

《C语言51课视频教程合集》

《C 45课视频教程》

通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势

猜您喜欢: