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也是这样的。

 

posted @ 2016-08-19 09:41  grb2015  阅读(132)  评论(0编辑  收藏  举报