What does '\0' mean?
\0
is the NULL character, you can find it in your ASCII table
, it has the value 0.
It is used to determinate the end of C-style strings.
However, C++ class std::string
stores its size as an integer, and thus does not rely on it.
C++ std::string
s are "counted" strings - i.e., their length is stored as an integer, and they can contain any character. When you replace the third character with a \0
nothing special happens - it's printed as if it was any other character (in particular, your console simply ignores it).
In the last line, instead, you are printing a C string, whose end is determined by the first \0
that is found. In such a case, cout
goes on printing characters until it finds a \0
, which, in your case, is after the third h
.
C++ has two string types:
The built-in C-style null-terminated strings which are really just byte arrays and the C++ standard library std::string
class which is not null terminated.
Printing a null-terminated string prints everything up until the first null character. Printing a std::string
prints the whole string, regardless of null characters in its middle.