“strcpy” 模拟的实现
我们都知道 strcpy() 函数是字符串拷贝函数,那么我们怎样来模拟实现这个函数呢?!
首先,我们要明白,strcpy() 在拷贝字符串的时候是一个一个拷贝的,直到遇到字符串结束标志 '\0' 时才停止拷贝。所以,明白了这一点,我们就可一进行简单的模拟实现了
#include<stdio.h>#include<stdlib.h>#include<assert.h>char*my_strcpy(char*str1,constchar*str2){assert(str1);assert(str2);while(*str1!='\0')//目标地址遇到'\0'结束{*str1=*str2;str1++;str2++;}//while(*str2!='\0')//注意判断条件一定不能这样写//{//*str1=*str2;//str1++;//str2++;//}returnstr1;}intmain(){charstr[10];//目标地址一定要是一个字符数组char*pa="abcdef";my_strcpy(str,pa);printf("%s\n",str);system("pause");return0;}
由于目标地址是没有初始化的一个字符数组,它里边存的内容我们是不知道的,并且在拷贝的过程中它会连同 *pa 中的 '\0' 一块拷贝,所以 while 条件句中的判断是 *str1 != '\0' ,如果判断错误即写为 *str2 != '\0' ,那么就会得到以下结果。
关于 my_strcpy() 函数模拟实现的几点要求:
1.拷贝时是连同字符串中的 '\0' 一块拷贝的;
2.函数实参的设定:原字符串前要加 const 保护;
3.函数的返回值类型要是 char* 类型(便于链式访问);
4.进入函数内部,要对两个指针进行断言,判断指针是否为空;
5.函数要返回一个值(地址);
6.一定要进行优化
最优化代码:
char*my_strcpy(char*str1,constchar*str2){assert(str1);assert(str2);while(*str1++=*str2++){;}returnstr1;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。