I think you should ask this question on a C++ list.
Also, the nulls protect against buffer-overflow bugs. An inexperienced (or very tired) programmer could end up assigning:
char *str = &(string's byte*)
without bothering to copy to a larger buffer, properly null terminated, and then pass str to some c function expecting that null.