文章目录
一、前言
首先,我们想要写出自己的strcpy函数,那必须先了解库中的strlen函数是实现原理。
在此我们可以看到strcpy的函数声明,返回值类型为char * ,由两个形参组成。
destination - 指针指向的目标数组。
source - 复制的字符来源。
根据说明我们可以得知,strcpy函数是将 source 指向的字符串复制到 destination 指向的数组中,也包括 ' \0 '(并停到这里)
所以,根据以上两点,我们可以轻易的写出我们的自己的MyStrcpy函数
一、注意事项
在使用函数进行复制字符串时,数组的大小应该确保有足够大的空间存储新的元素,否则会出现越界访问
二、代码实现
方法一、交换法:
void MyStrcpy(char *dest, char *src)
{
while (*src != '\0')
{
*dest = *src;
*dest++;
*src++;
}
*dest = *src;
}
方法一:代码详解
1、新建两个变量,dest指向目标数组,src指向字符来源数组
2、循环判断 src 不等于 ' \0 ' ,条件为真时,直接将 dest 按顺序替换成 src 的字符
3、当 src 等于 ' \0 ' 时,循环则停止,此时 src 指向 ' \0 ' 的位置
4、但是 ' \0 ' 并不会拷贝进去,所以需要我们再添加一句,将 ' \0 '拷贝进去
方法二、交换法优化:
void MyStrcpy(char *dest, char *src)
{
while (*src != '\0')
{
*dest++ = *src++;
}
*dest = *src;
}
方法二:代码详解
1、由方法一改进而来,基本原理不变
2、由于使用的是后置++,所以是先解引用拷贝过去,再++
方法三、表达式优化:
void MyStrcpy(char *dest, char *src)
{
while (*dest++ = *src++)
{
;
}
}
方法三:代码详解
1、利用表达式,先赋值再判断
2、配合着后置++,先解引用拷贝,在++
3、当指向 ' \0 ' 时,将 ' \0 '先拷贝过去,然后再判断(' \0 ' 的ASCII码为0,所以条件为假,如果数组中存在0,则这个0为字符0,其ASCII码为48,条件为真)
三、总结
文中使用了三种方法模拟strcpy函数,如果如有错漏之处,敬请指正。