memcpy和strcpy是两个面试经常会问到的函数,在网上找了很多资料都号称自己是c语言标准库源码。但是觉得质量参差不齐,记录一下本人认为最简单最容易理解的方法。
两者区别在于:
memcpy:指定内存拷贝的字节数量,不仅限于拷贝字符;考虑到了目标和源内存重叠情况,所以一定程度上可以认为本文中的memcpy实现了标准库中的memmove函数的功能。
strcpy:遇到结束符即停止,用于字符串拷贝。
/*
project:test
editor:帮我起个昵称吧
date:2019.8.31
*/
#include <stdio.h>
#define debug printf("----------到这里没问题-----------\n")
void* my_memccpy(void* des,const void* src,size_t n)
{
char* pdes = (char *)des;
const char *psrc = (const char *)src;
if (NULL == psrc || NULL == pdes)
return des;
if (psrc >= pdes || pdes >= psrc+n)//如果内存没有重叠
{
while (n--)
{
*pdes++ = *psrc++;
}
}
else//有重叠
{
while (n--)
{
* (pdes + n)= *(psrc + n);
}
}
return des;
}
char* my_strcpy(char * des, const char*src)
{
if (NULL == psrc || NULL == pdes)
return des;
char *pdes = des;
char const *psrc = src;
while ((*pdes ++= *psrc++) != '\0');
return des;
}
int main(int argc, char* argv)
{
char a[20] = "i love CSDN";
char b[20];
//my_memccpy(b, a, 11);
my_strcpy(b, a);
printf("%s", b);
}