受到关于SQLite3中以下代码的这个问题的启发:
static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
Run Code Online (Sandbox Code Playgroud)
这附带一条提交消息,说这个函数有助于int溢出.
我对这部分特别感兴趣:
const char *z2 = z;
while( *z2 ){ z2++; }
Run Code Online (Sandbox Code Playgroud)
对我来说,这个循环前进,z2直到z2指向null终止符.然后z2-z产生字符串长度.
为什么不使用strlen()这个部分并重写如下:
return 0x3fffffff & (int)(strlen(z));
Run Code Online (Sandbox Code Playgroud)
为什么使用循环+减法代替strlen()?什么可以循环+减法做什么strlen()不可以?