前言
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不保证拷贝的结果的正确。
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的问题!)
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;
}
测试结果:
C语言哪些常用在面试的库函数实现过程!C语言专题之拷贝函数实现-4.jpg (56.47 KB, 下载次数: 0)
2020-4-22 03:33 上传
顺带一提,自定义类型的数据即可:
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)