首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要将strlen重新实现为loop+subtraction?

为什么要将strlen重新实现为loop+subtraction?
EN

Stack Overflow用户
提问于 2011-07-27 18:31:05
回答 1查看 700关注 0票数 19

灵感来自于来自SQLite3的以下代码的this question

代码语言:javascript
复制
 static int strlen30(const char *z){
    const char *z2 = z;
    while( *z2 ){ z2++; }
    return 0x3fffffff & (int)(z2 - z);
 }

这伴随着一个commit message,说这个函数有助于int溢出。

我对这部分特别感兴趣:

代码语言:javascript
复制
 const char *z2 = z;
 while( *z2 ){ z2++; }

对我来说,这个循环使z2前进,直到z2指向空终止符。然后,z2-z生成字符串长度。

为什么不对这部分使用strlen(),并像这样重写:

代码语言:javascript
复制
return 0x3fffffff & (int)(strlen(z));

为什么不使用strlen()而使用loop+subtraction?strlen()不能做的事,loop+subtraction能做什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6842880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档