string.data();返回一个非'\0'的字符?
int main ()
{
int length;
string str = "Test string";
char* cstr = "Test string";
if ( str.length() == strlen (cstr) )
{
cout << "str and cstr have the same length.\n";
length = str.length();
if ( memcmp (cstr, str.data(), length ) == 0 )
cout << "str and cstr have the same content.\n";
printf("%s\n",str.data());
}
return 0;
}
printf后依然可以成功打印出结果,
这里是否是:随即的
或者说 简单的实验,不能够验证 data不带结尾符。
http://www.cplusplus.com/reference/string/string/data/
这里说的,不是不带的。
问题2: www.cplusplus.com
这个网站上的资料 是否是 c++11版本的?
谁知道,谢谢
[解决办法]
太想当然了,想改就改了?那么随意?
const成员函数就不应该修改自己类里的东西,不是可行不可行的问题
const char* c_str() const;
const char* data() const;
再说了,既然调用c_str()时可以追加个0,为什么非要到c_str()的时候再追加?赋值的时候不行吗?如果你要说data非要没有0结尾,那调用过c_str()之后有0结尾了,就算不说const的意义,这样data不也有0结尾了?这样做有什么意义?或者调用data()时再把0结尾去掉?
这样做有什么实际意义吗?
[解决办法]
按照你的说法,
返回一份拷贝,那么我们可以用const_cast把返回来的指针的cosnt属性去掉,
然后对这个缓冲区修改,
再看看,是否原来的缓冲区会不会修改?
string str="hello";
char const *p =str.c_str();
char * q=const_cast<char*>(p);
*q='a';
结果自己验证吧