As an aside any halfway decent optimizer would realize that the results of strlen() are unchanging as long as the contents of what it's passed isn't modified. That's a common enough pattern that it should be checked.
IME this is a myth perpetuated by bad computer science lecturers who haven't thought through the consequences of what they're saying. strlen() can change because of changes inside the loop but also because of also threads in the system; I've not yet seen a compiler optimise that away, and neither should it, IMO.
G