Zhang Jiuan’ Notes

strlen的i++与++i的细节

  无意间在网上看到如下strlen的实现:

int strlen(const char *str)

{

    register const char *p = str;

    while (*p++) ;

    return p - str;

}

程序倒显的挺简洁,但仔细想了一下是存在bug的。

1 没有对输入进行合法性验证

2 计算的长度也比字符串的实际长度多1。

于是当时想到改成++p会修正上述的第2点,第1点在此不作讨论。

int strlen(const char *str)

{

    register const char *p = str;

    while (*++p) ;

    return p - str;

}

在一般情况这个子程是可以工作的,效率也可以,但它仍存在bug,那就是字符串长度为0。

接口设计处理,实现仍旧是硬道理,特别是循环和++ –的地方犹其需要注意。

自测过程中,边界、极限测试也是十分必要的。

If you enjoyed this post, make sure you subscribe to my RSS feed!

No Comments, Comment or Ping

Reply to “strlen的i++与++i的细节”

You must be logged in to post a comment.

返回顶部