strcpy
char *my_strcpy(char *s1,const char *s2)
{
// printf("%d\n",strlen(s1));
// printf("%d\n",strlen(s2));
// if(strlen(s1)<strlen(s2))//这样来判断长度是不正确的,strlen是s1指向的空间中包含的字符串数,不能代表空间的大小。而你用sizeof也是不行的,所以我们无法获得空间的大小
// return NULL;
if(s2 == NULL)
return NULL;
char *p=s1;
while(*s2!='\0')
{
*s1++=*s2++;
}
*s1=*s2; //这一步是需要的,要把'\0'也复制过去
return p;
}
我们是无法判断s1的空间是否大于s2的。所以需要自己检查!
事实上,标准源码否不会给你进行是否为NULL的检查:

同样:strlen也是这样的。

浙公网安备 33010602011771号