为什么要用"strlen30()"?

hor*_*ity 7 c sqlite strlen

static int strlen30(const char *z){
  const char *z2 = z;
  while( *z2 ){ z2++; }
  return 0x3fffffff & (int)(z2 - z);
}
Run Code Online (Sandbox Code Playgroud)

我阅读并想知道sqlite的源代码.

为什么用"strlen30()"代替strlen()(string.h)?

谢谢.

Jef*_*ter 3

此更改的提交消息指出:

[793aaebd8024896c] 签入的一部分 [c872d55493] 切勿使用 strlen()。使用我们自己的内部 sqlite3Strlen30() ,保证永远不会溢出整数。额外的显式强制转换以避免出现令人讨厌的警告消息。(CVS 6007) (用户: drh 分支: trunk)

  • 提交消息太可怕了。我想知道用“&”裁剪如何帮助溢出整数? (4认同)