条件检入C中的循环

假设我有一个字符串“str”。 我的for循环如下:

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

问题:当检查条件时,i <strlen(str),是每次循环运行时计算的strlen(str)部分吗? 或者它被存储并且仅在第一次计算?

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

 int n = strlen(str); for (i=0; i 

这也有效:

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