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