Home > Software engineering >  Inaccurate length of string when using 'strlen'
Inaccurate length of string when using 'strlen'

Time:08-10

I am getting inaccurate string length when printing the length of a string using the strlen function.

I am getting the output for string a as 5 (which is correct), but when I am printing the length of string b, the output comes out to be 10 (which should be 5).

Here is the code snippet:

char a[] = "Yolow";
char b[] = {'H', 'e', 'l', 'l', 'o'};
printf("len = %d\n", strlen(a));
printf("len = %d", strlen(b));

CodePudding user response:

Here's the original:

char b[] = {'H', 'e', 'l', 'l', 'o'};

and here's a fix that turns an array of characters into a (null terminated) "string":

char b[] = {'H', 'e', 'l', 'l', 'o', '\0' }; // add ASCII 'NUL' to the array

or, alternatively:

char b[] = {'H', 'e', 'l', 'l', 'o',   0 }; // add zero to the array

CodePudding user response:

In C, strings end at 0 byte. It is automatically there when you have string literal using "", and when you use string functions to modify strings (exception: strncpy).

But your b does not have this 0 byte, so it is not actually a string, it is just a char array. You can't use string functions like strlen with it!

To put the 0 there, you can do this:

char b[] = {'H', 'e', 'l', 'l', 'o', '\0'};

Note: Using '\0' instead of just 0 is just cosmetic, making it explicit this is 0 byte value character. Using just 0 is equal syntax, if you prefer that.

  • Related