为什么在std::basic_string中插入'\0'字符时,.length()方法不受影响,但如果调用char_traits<char>::length(str.c_str()),则会获得字符串长度直到第一个'\0'字符为止?
例如:
例如:
string str("abcdefgh");
cout << str.length(); // 8
str[4] = '\0';
cout << str.length(); // 8
cout << char_traits<char>::length(str.c_str()); // 4
basic_string<>::data()
成员函数。 - dappawitc_str()
会去掉空字节,而是data()
保留了它们;实际上,它们两个都有空字节,只不过c_str()
保证末尾有一个空字节而data()
没有。问题在于,那些内部字符串字节是如何被用于C风格字符串实现的函数解释的。 - templatetypedefstd::string
确实使用traits类,这为您提供了令人难以置信的灵活性。 - templatetypedef