strlen returns the number of characters before the terminating null character.
The terminating null character also takes up space, so keep in mind that an array 100 big will only store 99 characters of text (indicies 0-98), the 100th being the terminating null character (at index 99).
Put another way (m'learned chum Palm Tree is bang on, so this is just the same again in different words), strlen tells you the number of bytes from where the pointer points to the next zero value. Why do you think there is a zero value two bytes along from the pointer msg1?