strcpy()的实现

作者: 编程应用  发布:2019-09-26

看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现

strcpy()的实现,strcpy()实现

看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现

 

这里只写平时理解的,三个要点:

 1 //strcpy自己实现
 2 
 3 char *strcpy(char *dest, const char *src)
 4 {
 5     assert(dest != NULL && src != NULL);  //判断参数的合法性
 6     char *ret = dest;                            //记录原目标地址,用于返回
 7     while( (*dest++ = *src++) != '' )    //先拷贝数据,再判断是否结束
 8         ;
 9     return ret;
10 }

 

为什么要返回char *类型?

答:能够支持链式表达式,比如int len = strlen(strcpy(strA, strB));

这里只写平时理解的,三个要点:

strcpy原型怎才可以实现?

char *strcpy(char *strDest, const char *strSrc);//第二个参数设置为常量 是不想在函数中间 让其发生改变
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 这句是断言 判断不该出现的错误
//如果出现作物 立即在这里停止
char *address = strDest;//创建一个地址指针 用于返回
while( (*strDest++ = * strSrc++) != ‘’ ) // 2分
//这句比较复杂
//(*strDest++ = * strSrc++) 这个是逐位赋值
而每次赋值之后 用*strDest!='/0'进行比较作为循环条件结束 也就是 strSrc已经复制到结束了
return address ;//最后返回
}  

 1 //strcpy自己实现 2  3 char *strcpy(char *dest, const char *src) 4 { 5     assert(dest != NULL && src != NULL);  //判断参数的合法性 6     char *ret = dest;                            //记录原目标地址,用于返回 7     while( (*dest++ = *src++) != '' )    //先拷贝数据,再判断是否结束 8         ; 9     return ret;10 }

strcpy的实现

主函数和strcpy中的memset(dest, 0, sizeof(dest));
这句话有问题;
因为char* dest未指向任何变量,长度不确定,那么这样分配的内存也是大小不确定的,所以有可能访问了为分配单元。

可以写成memset(dest,0,sizeof(src));这句话是分dest与src一样大小的单元。因为在strcpy中传入src时,或则是主函数中的src都是已知大小的  

看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现 这里只写平时理解的,三个要点: 1 // st...

为什么要返回char *类型?

答:能够支持链式表达式,比如int len = strlen(strcpy(strA, strB));

本文由金沙澳门官网送注册58发布于编程应用,转载请注明出处:strcpy()的实现

关键词:

上一篇:Spring中与Spring相关的讲授
下一篇:没有了