cstrlenstring-length

Is using strlen() in the loop condition slower than just checking for the null character?


I have read that using strlen is more expensive than testing for the null character:

We have a string x which is 100 characters long.

I think that

for (int i = 0; i < strlen(x); i++)

is more expensive than this

for (int i = 0; x[i] != '\0'; i++)

Is it true? Does the second code work in every situation or are there exceptions?

Would using pointers like below be better?

for (char *tempptr = x; *tempptr != '\0'; tempptr++)

Solution

  • for (int i=0;i<strlen(x);i++)
    

    This code is calling strlen(x) every iteration. So if x is length 100, strlen(x) will be called 100 times. This is very expensive. Also, strlen(x) is also iterating over x every time in the same way that your for loop does. This makes it O(n^2) complexity.

    for (int i=0;x[i]!='\0';i++)
    

    This code calls no functions, so will be much quicker than the previous example. Since it iterates through the loop only once, it is O(n) complexity.