首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用"strlen30()“而不是"strlen()"?

为什么使用"strlen30()“而不是"strlen()"?
EN

Stack Overflow用户
提问于 2011-07-27 17:31:31
回答 2查看 333关注 0票数 7

我读过sqlite的源代码,并对此感到好奇。

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

为什么使用strlen30()而不是strlen() (在String.h中)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-27 17:44:59

与此更改相关的commit message声明:

793aaebd8024896c是check-in c872d55493的一部分,千万不要使用strlen()。使用我们自己的内部sqlite3Strlen30(),它保证永远不会溢出整数。附加的显式强制转换,以避免出现麻烦警告消息。(CVS6007)(用户: drh分支:主干)

票数 3
EN

Stack Overflow用户

发布于 2011-07-27 17:51:03

CVS提交消息说:

从不使用strlen()。使用我们自己的内部sqlite3Strlen30(),它保证永远不会溢出整数。附加的显式强制转换,以避免出现麻烦警告消息。(CVS 6007)

我找不到任何关于这个提交的进一步引用,也没有解释他们是如何在那个地方获得溢出的。我相信这是某个静态代码分析工具报告的错误。

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

https://stackoverflow.com/questions/6842130

复制
相关文章

相似问题

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