c语言库函数在哪实现的,C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现...

前言

a3318c941136e31422f9e0be7c9e8802.gif

C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-1.jpg (46.05 KB, 下载次数: 0)

2020-4-22 03:33 上传

本文主要讲解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不保证拷贝的结果的正确。

a3318c941136e31422f9e0be7c9e8802.gif

C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-2.jpg (23.76 KB, 下载次数: 0)

2020-4-22 03:33 上传

代码实现

char * strcpy(char * dest, constchar * src)

char * strcpy(char * dest, const char * src) // 实现src到dest的复制

{

\tif ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性

\t{

\t\treturn NULL;

\t}

\tchar *strdest = dest;        //保存目标字符串的首地址

\twhile ((*dest++ = *src++) != '\\0'); //把src字符串的内容复制到dest下

\treturn strdest;

}

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

a3318c941136e31422f9e0be7c9e8802.gif

C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-3.jpg (57.6 KB, 下载次数: 0)

2020-4-22 03:33 上传

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

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

{

\tif ((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效

\t\treturn NULL;

\tchar *tempTo = (char *)memTo;  //保存memTo首地址

\twhile (size-- > 0)  //循环size次,复制memFrom的值到memTo中

\t\t*tempTo++ = *((char *)memFrom)++;

\treturn memTo;

}

测试结果:

a3318c941136e31422f9e0be7c9e8802.gif

C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-4.jpg (56.47 KB, 下载次数: 0)

2020-4-22 03:33 上传

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

a3318c941136e31422f9e0be7c9e8802.gif

C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-5.jpg (62.02 KB, 下载次数: 0)

2020-4-22 03:33 上传

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

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

{

\tchar *dp = (char *)dst;

\tchar *sp = (char *)src;

\tif(dst==NULL || src==NULL)return NULL;

\t//非重叠

\t//dp < sp

\t//dp > (sp+n)

\tif(sp>dp||(sp+n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值