I just don't fundamentally understand why a string wouldn't just end on its last char.
There are several ways of knowing where is the "last char":
- Store the number of characters in the string separately from the string's characters,
- Put a marker that indicates the last char of the string, or
- Store the pointer to the last char of the string separately from the string's characters.
C choose the second route; other languages (Pascal, etc.) choose the first route. Some implementations of C++ std::string
choose the third route* .
* Even
std::string
implementations that use the first or the third approach null-terminate their buffers for compatibility with the C portions of the library. This is necessary to ensure that
c_str()
returns a valid C string.