2014-09-06 84 views
0

假设我有一个字符串“str”。 我的for循环如下:条件检查for循环在C

for(i=0;i<strlen(str);i++){ 

    //do stuff 

} 

问题:当条件被选中,我<的strlen(STR),是的strlen(STR)部分每次循环运行计算的?或者它被存储并且仅在第一次计算?

回答

5

循环中的条件表达式将在每次迭代时得到评估 - 它就是这样,直到(理想情况下)表达式变为false。所以是的:strlen(str)将被重复计算。如果字符串根本没有改变,将其长度存储在局部变量中会更好。

int n = strlen(str); 
for (i=0; i<n; i++) { 
    // do stuff 
} 

这也将工作:

for (i=0; str[i] != '\0'; i++) { 
    // do stuff 
} 
+0

的是,在大部分我见过他们使用strlen条件在for循环的所有节目的网站。所以我们应该使用变量来做到这一点,对吧?它应该会有更好的表现,尽管非常轻微。 – 2014-09-06 04:53:21

+1

@guitar_geek看看这篇[文章](http://www.cprogramming.com/tips/tip/dont-use-strlen-in-a-loop-condition),它将我的观点带回家。 – 2014-09-06 04:54:41

+2

如果大多数网站确实是这样的情况,这只能证明大多数网站都是不好的信息来源。 – 2014-09-06 05:00:05