关于用cout输出string,遇到’\0’的处理问题

在string类型变量接收的常量字符串如果有'\0',.length()函数和用cout就会以第一个'\0'作为字符串的结尾。

为什么将string变量的一个元u N M W素改为'\0'后,string变量的.length()函数和用cout输出不会受到'\0'的干扰?

代码如下

    stringh 6 G d  u str1 = 5 A ( : = #"hello";
string s0 7 Rtr2 = "he\0llo";
cout << "length oY M bf str1:" << str1.length() << "  str1:" &! j  * { $ 1 -lt;< str1 &lX N 7 Nt;< endl;
cout << "length of str2:" << str26 w r L C.length() << "  str2:" << str2 << endln & ? 1 ,;
cout << endl;
str1[2] = '\0';
cout << "length of str1:" << str1.length() << "  str1:1 d 6 4 +" << str1 << endl;

运行结果:

回答

常量字符串是c风格的