灵感来自于来自SQLite3的以下代码的this question:
static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
这伴随着一个commit message,说这个函数有助于int
溢出。
我对这部分特别感兴趣:
const char *z2 = z;
while( *z2 ){ z2++; }
对我来说,这个循环使z2
前进,直到z2
指向空终止符。然后,z2-z
生成字符串长度。
为什么不对这部分使用strlen()
,并像这样重写:
return 0x3fffffff & (int)(strlen(z));
为什么不使用strlen()
而使用loop+subtraction?strlen()
不能做的事,loop+subtraction能做什么?
https://stackoverflow.com/questions/6842880
复制相似问题