C中strcpy函数的几种实现和解析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中strcpy函数的几种实现和解析

题目:?????已知strcpy函数的原型是:?????????char?*?strcpy(char?*?strDest,const?char?*?strSrc);?????1.不调用库函数,实现strcpy函数。?????2.解释为什么要返回char?*。?(一)高质量c++编程上的答案五、编写strcpy函数(10分)已知strcpy函数的原型是???????char *strcpy(char *strDest, const char *strSrc);???????其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数?strcpychar?*strcpy(char?*strDest,?const?char?*strSrc){????assert((strDest!=NULL) (strSrc?!=NULL));????// 2分????char?*address?=?strDest;??????????????????????????????????????????// 2分????while( (*strDest++ = *?strSrc++) !=?\0?)?????????// 2分??????????????NULL?;????return?address?;??????????????????????????????????????????????????// 2分}ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE??(0),??程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。如果ASSERT()中的条件不成立(比如??ASSERT(0)?;?),会弹出一个比较吓人的对话框。点击重试,可以到达??ASSERT??断言不成立的那一行.?????(*strDest++ = *?strSrc++)为一个赋值表达式,C语言中赋值表达式所代表的值就是被赋值变量最终被赋予的值。(2)strcpy能把strSrc的内容复制到strDest,为什么还要char *?类型的返回值?答:为了实现链式表达式。??????????????????????????????????????????????// 2分例如???????int length = strlen( strcpy( strDest, “hello world”) );?【规则6-2-3】不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。错误信息可以用throw抛出。?????建议6-2-1】有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。例如字符串拷贝函数strcpy的原型:char *strcpy(char *strDest,const char *strSrc);strcpy函数将strSrc拷贝至输出参数strDest中,同时函数的返回值又是strDest。这样做并非多此一举,可以获得如下灵活性:??charstr[20];int??length = strlen( strcpy(str, “Hello World”) );?(二)程序员面试宝典中的答案char* strcpy1(char?*strDest,?const?char*?strSrc){???????assert(strSrc?!=?NULL?);???????assert(strDest?!=?NULL);???????int?i;?????char?*address?=?strDest;????for(i?= 0;?strSrc[i] !=?\0;?i++)??????????????strDest[i] =?strSrc[i];???????strDest[i] =?\0;????????return?address;}(三)带有异常抛出的答案和解析????解说:?????1.strcpy的实现代码??char?* strcpy3(char?*?strDest,const?char?*?strSrc?/*[0]*/){???????????if?((NULL?==?strDest)||(NULL?==?strSrc))?//[1]??????????????throw?Invalid argument(s);?//[2]???????char?*?strDestCopy=strDest;??//[3]???????

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档