目录
- 一、strcpy函数的介绍
- 1.函数的声明
- 2.函数功能与注意事项
- 3.函数的使用
- 二、模拟实现strcpy函数
- 三、strcat函数的介绍
- 1.函数的声明
- 2.函数功能与注意事项
- 3.函数的使用
- 四、模拟实现strcat函数
- 总结
这里有超详细的函数模实现分享,带大家一起来模拟实现这些函数,后续还将更新更多的函数模拟实现的文章。
一、strcpy函数的介绍
1.函数的声明
char* strcpy(char * destination, const char * source );
2.函数功能与注意事项
- 将源指向的字符串复制到目标指向的数组中,包括终止空字符(并在该点停止)。
- 源字符串必须以 '\0' 结束。
- 会将源字符串中的 '\0' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
3.函数的使用
#include
#include//使用strcpy函数时记得引用它的头文件
int main()
{
char ch1[7] = "abcdef";
char ch2[10];//ch2为目标数组,空间必须比ch1大
strcpy(ch2, ch1);
printf("%s\n", ch2);
return 0;
}
运行结果

二、模拟实现strcpy函数
1.模拟分析
1.我们需要将源指向的字符串复制到目标指向的数组中,包括终止空字符,所以我们就可以一个字符一个字符的复制过去,注意终止空字符'\0'也要复制过去,如果没有将‘\0’复制过去的话,后面如果想要打印将这个赋值过去的字符串的话就会出现问题。
2.因为我们源指向的字符串是不需要改变的,所以我们需要将我们源指向的字符串用const限制,以防它被改变,让其变得更安全。
3.为了避免传进来的地址是空指针,我们需要用assert来断言传进来的地址不是空指针。
4.为了实现链式访问,我们要将传进来的目标起始地址(destination)返回。由于这个函数在执行的时候会改变destination存储的内容,所以我们要重新创建一个char*类型的指针来存储这个地址。
2.模拟实现
下面代码有点干,需要细品,建议收藏以免忘记。
#include
#include
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char ch1[7] = "abcdef";
char ch2[10];//ch2为目标数组,空间必须比ch1大
my_strcpy(ch2, ch1);//将ch1中的字符串复制到ch2中
printf("%s\n", my_strcpy(ch2, ch1));//链式访问
return 0;
}
运行结果

三、strcat函数的介绍
1.函数的声明
char * strcat ( char * destination, const char * source );
2.函数功能与注意事项
- 将源字符串追加到目标字符串。目标字符串的终止空字符'\0'被源字符串的第一个字符覆盖,并包含一个终止空字符'\0'在新字符串的末尾,由两者在目的地连接而成。
- 源字符串必须以 '\0' 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
3.函数的使用
#include
#include//使用strcat函数时记得引用它的头文件
int main()
{
char ch1[4] = "def";
char ch2[7] = "abc"; //ch2为目标数组,空间必须比ch1大
strcat(ch2, ch1); //将ch1中的字符串追加到ch2中
printf("%s", ch2);
return 0;
}
运行结果

四、模拟实现strcat函数
1.模拟分析
1.我们追加字符串时是将源字符串追加到目标字符串里面,我们需要将从目标字符串里面'\0'的位置开始追加,所以我们首先就需要找到目标字符串中'\0'的位置。并且我们追加完后需要在字符串的追后多追加一个'\0',使这个新字符串完整。
2.因为我们源指向的字符串是不需要改变的,所以我们需要将我们源指向的字符串用const限制,以防它被改变,让其变得更安全。
3.为了避免传进来的地址是空指针,我们需要用assert来断言传进来的地址不是空指针。
4.为了实现链式访问,我们要将传进来的目标起始地址(destination)返回。由于这个函数在执行的时候会改变destination存储的内容,所以我们要重新创建一个char*类型的指针来存储这个地址。
2.模拟实现
#include
#include
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);//断言传进来的地址不是空指针
char* ret = dest;//保存目标起始地址
while (*dest)//找到'\0'的地址
{
dest++;
}
while (*dest++ = *src++)//追加字符串
{
;
}
return ret;
}
int main()
{
char ch1[4] = "def";
char ch2[7] = "abc"; //ch2为目标数组,空间必须比ch1大
printf("%s\n", my_strcat(ch2, ch1));//链式访问
return 0;
}
运行结果

总结
这就是今天的全部内容了,要是大家觉得有用的话记得给博主一个三连哦,嘻嘻。最后祝考研的同学都能上岸,找工作的同学都能进大厂。