首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

string.data();回到一个非'\0'的字符

2013-01-21 
string.data()返回一个非'\0'的字符?int main (){int lengthstring str Test stringchar

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版本的?


谁知道,谢谢






[解决办法]
引用:
引用:引用:引用:先不去说string里有没有结束符,lz的测试方法就是错的,原因7楼已经说了
然后关于data()做的事情,VS的库里是直接内联返回c_str(),因此是与c_str完全一致的,其他版本的库就请各位自己去查看源码了
或许标准里的确没有规定……
太想当然了,想改就改了?那么随意?
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结尾去掉?

这样做有什么实际意义吗?
[解决办法]
引用:
引用:引用:引用:引用:先不去说string里有没有结束符,lz的测试方法就是错的,原因7楼已经说了
然后关于data()做的事情,VS的库里是直接内联返回c_str(),因此是与c_str完全一致的,其他版本的库就请各位自己去……


按照你的说法,

返回一份拷贝,那么我们可以用const_cast把返回来的指针的cosnt属性去掉,

然后对这个缓冲区修改,

再看看,是否原来的缓冲区会不会修改?

string str="hello";
char const *p =str.c_str();
char * q=const_cast<char*>(p);

*q='a';


结果自己验证吧

热点排行