相关疑难解决方法(0)

为什么重新实现strlen作为循环+减法?

受到关于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()不可以?

c c++ sqlite string strlen

19
推荐指数
2
解决办法
676
查看次数

标签 统计

c ×1

c++ ×1

sqlite ×1

string ×1

strlen ×1