从字符串编程谈计算机底层知识.pdfVIP

  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文档。上传文档
查看更多
从字符串编程谈计算机底层知识 (转载) JOEL “ ” 摘录自 《 说软件》书的 深入底层 C语言中字符串的工作方式: 1. 如果不遍历字符串并查找末尾的空字符,就没有办法知道字符串在何处结束 (即字符串 长度)。 2. C JPEG 字符串中不能包含任何零。因此, 字符串中不能存放诸如 图片之类的任何二进 制数据块。 API ASCIZ 对于重要程序、 、操作系统与类库,用户应该像躲避瘟疫一样地避开使用 字符 串。为什么呢?先从编写函数strcat 的一个代码版本入手进行讨论。该函数的功能是将一个字 符串附加在另一个字符串之后。 void strcat(char* dest, char* src ) { while (*dest) dest++; while (*dest++ *src++); } 很简洁,很好用!但你考虑下面的使用情况: char bigString[1000];/* 永远也不知道需要分配多大的存储空间...*/ bigString[0] ; strcat(bigString,John, ); strcat(bigString,Paul, ); strcat(bigString,George, ); strcat(bigString,Joel );这样处理还算得上很好的方式吗? 不,该代码使用的是蹩脚的Shlemiel喷涂算法。Shlemiel是谁?他是下面这则笑话中的 人物: Shlemiel是谁?他是下面这则笑话中的人物: Shlemiel得到一份当街道油漆匠的工作,工作内容是在马路中间喷涂点画线。第一天,他 拿出一罐漆来到他负责的路段,喷涂了300码长的线。干得不错!他的老板称赞道, 真是一“ ” “ 位麻利的工匠 ,然后赏给他一个戈比 (一种俄罗斯辅币,译者注)。” 第二天,Shlemiel只喷涂了150码。 喏,虽然不如昨天那样好,但你仍然算得上一位麻利的“ 150 ” 工匠! 码还是值得肯定的一个长度, 老板说完又赏给他一戈比。 Shlemiel 30 “ 30 ” “ 接下来的一天, 只喷涂了 码长的马路。 才 码!他的老板吼道。 这太令人难 10 ” 以接受了!第一天你干的工作量是今天的 倍!接下来是怎么回事? “我尽力了,”Shlemiel说道。 一天一天下去,我离油漆罐越来越远!“ ” 如果像前面给出的代码那样使用strcat函数将会出现什么结果。由于strcat 的第一部分代 码必须每次都扫描整个目的字符串,以反复寻找那个捉摸不定的空终止字符,因此该函数将比所 希望的速度慢得多,并且它根本谈不上存在伸缩性。你每天使用的许多代码都有这个问题。 strcat C mystrcat 如何修正 函数呢?有几个聪明的 语言程序员是这样来实现他们自己的 函数 的: char* mystrcat(char*dest, char* src ) { while (*dest) dest++; while (*dest++ *src++); return --dest; } char bigString[1000];/* 永远不知道要分配多少存储空间……*/ char *p bigString;

文档评论(0)

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

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

1亿VIP精品文档

相关文档