I've understood that string arrays end with a '\0' symbol. So, the following code should print 0, 1, 2 and 3. (Notice I'm using a range-based for() loop).

```
$ cat app.cpp
    #include <iostream>
    int main(){
        char s[]="0123\0abc";
        for(char c: s) std::cerr<<"-->"<<c<<std::endl;
        return 0;
    }

```

But it does print the whole array, including '\0's.

```
$ ./app
-->0
-->1
-->2
-->3
-->
-->a
-->b
-->c
-->

$ _

```

What is happening here? Why is the string not considered to end with '\0'? Do C++ collections consider (I imagine C++11) strings differently than in classical C++?

Moreover, the number of characters in `"0123\0abc"` is 8. Notice the printout makes 9 lines!

(I know that `std::cout<<` runs fine, as well as `strlen()`, as well as `for(int i=s; s[i]; i++)`, etc., I know about the end terminator, that's not the question!).