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语言的同学来说也是很有帮助的。主要有以下三个函数:
- strcpy:char * strcpy(char * dest const char * src);
- memcpy:void *memcpy(void *memTo const void *memFrom size_t size);
- memmove:void *memmove(void *dst const void *src size_t n);
可能大家都知道这三个函数都可以实现拷贝效果,在这里主要是讲下他们之间的区别,strcpy 和 memcpy主要有以下三方面的区别:
- 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符串、整型、结构体、类等。
- 复制的方法不同。strcpy不需要指定长度,它遇到被复制字符串的结束符"\0”才结束,所以容易溢出。memcpy则是根据第3个参数决定复制的长度。
- 用途不同。通常在复制字符串时用strcpy,而需要复制其它类型的数据是用memcpy。
memcpy和memmove区别
当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
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的问题!)
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;
}
测试结果:
顺带一提,自定义类型的数据即可:
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 ,windows知识,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程
《C语言51课视频教程合集》
《C 45课视频教程》
通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势