Jun 6, 2009
strlen的i++与++i的细节
如果您是第一次读我的文章,你可能想订阅到我的 RSS feed. 多谢您的光顾!
无意间在网上看到如下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.