I’ve read that it is bad practice to call strlen() in my for loop condition, because this is an O(N) operation.
However, when looking at alternatives I see two possible solutions:
int len = strlen(somestring);
for(int i = 0; i < len; i++)
{
}
or…
for(int i = 0; somestring[i] != '\0'; i++)
{
}
Now, the second option seems like it might have the advantage of 1) not declaring an unnecessary variable, and 2) should the string length be modified in the loop it should still reach the end as long as the length isn’t < i.
However, I’m not sure. Which one of these is standard practice among C programmers?
The second one is usually preferred.
The other popular form is
Yet another one is
(the extra
()around assignment are needed to make some suspicious compilers not issue a warning stating I might mean comparison insidewhilecondition)Indeed,
strlenis quite slow, because it must go through the whole string looking for trailing 0. So,strlenis essentially implemented as(well, in fact a slightly more optimized assembler version is used).
So you ought to avoid using
strlenif possible.