我们先来看strcpy的原型:
接下来我们自己实现my_strcpy函数:
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char *des,const char *src){
assert(src != NULL);
assert(des != NULL);
while (*des++ = *src++){
;
}
return des;
}
int main(){
char src[] = "abcde";
char des[] = "";
printf("src:%s\n", src);
printf("des:%s\n", des);
my_strcpy(des, src);
printf("复制后的des:%s\n", des);
return 0;
}
这里有以下几个重点即得分点:
1.const关键字:保护源字符串指向的内容不被改变
2.assert();断言函数,如果()中条件为假,就打印一条错误信息,并终止程序执行。
它的原型为:#include <assert.h>
void assert( int expression );
3.最关键的一点就是它的返回值是char*,一般情况下我们只会想到void,那么他设置这样的返回值与void相比好处在于哪里?
就在于:char*可以实现链式访问,将目标地址返回,这样的话strcpy函数就可以作为另一个函数的实参了。
我们应该多思考库函数的原型为什么这样写,这样也就可以自己完美的实现一个库函数了。