Sizeof vs Strlen

sizeof and strlen() do different things. In this case, your declaration

char string[] = "october";

is the same as

char string[8] = "october";

so the compiler can tell that the size of string is 8. It does this at compilation time.

However, strlen() counts the number of characters in the string at run time. So, after you call strcpy(), string now contains "september". strlen() counts the characters and finds 9 of them. Note that you have not allocated enough space for string to hold "september". This is undefined behaviour.


The Output is correct because

first statement string size was allocated by compiler that is 7+1 (October is 7 bytes & 1 byte for null terminator at compile time)

Second statement: you are copying September (9 bytes to 8 bytes string);

there for you got size of September as 8 bytes (still strlen() will not work for September it does not have null character)