string中的data()和c_str()一些知识

一丶先说c_str(),它返回const char*类型,不能修改指向的内容(但是可以强制类型转换成char*类型),并且实际上返回string内部那个数组的首地址的一个指针,并且数组末尾有'\0'。

如图

string中的data()和c_str()一些知识_第1张图片

所以对数组修改实际上是对str1修改。

 

另外,比如做str1 = "abcdef"操作

则c = "abcdef\0"

(1).若再做str1 = "mn"

则c = "mn\0def\0"

此时若cout << c得到的是mn;

但是cout << c[3]还是d(注意此时若cout << str1[3]会出错,下标只能到2)

(2).若对str1再次赋值的字符串长度比str1.capacity()大,那么str1内部就会重新分配空间,此时的指针c就会失效。

 

二丶data()和c_str()的区别就在返回的指针所指的数组最后带不带'\0',这由编译器决定。

你可能感兴趣的:(string中的data()和c_str()一些知识)