string中c_str()的⽤法
1. c_str()的语法
语法:
1 const char *c_str();
c_str()函数返回⼀个指向正规C字符串的指针常量, 内容与本string串相同。
这是为了与c语⾔兼容,在c语⾔中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:⼀定要使⽤strcpy()函数 等来操作⽅法c_str()返回的指针。
2. 应⽤
2.1 应⽤⼀
⽐如:最好不要这样:
1 char* c;
2 string s="1234";
3 c = s.c_str();
//error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将⼀个const char *赋与⼀个char *。
c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进⾏相应的操作转化「通过strcpy函数」。
应该这样⽤:
1 char c[20];
2 string s="1234";
3 strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是⼀个临时指针,不能对其进⾏操作。
再举个例⼦:
c_str() 以 char* 形式传回 string 内含字符串,如果⼀个函数要求char*参数,可以使⽤c_str()⽅法:
1 string s = "Hello World!";
2 printf("%s", s.c_str()); // 输出 "Hello World!"
2.2 应⽤⼆
1. #include <iostream>
2. #include <string>
3. int main() {
4. std::string s = "Chelse";
5. const char *str = s.c_str();
6. std::cout << str << std::endl;
7. s[1] = 'm';
8. std::cout << str << std::endl;
9.
0. return 0;
1. }
第⼀个输出 当然是 Chelse;
第⼆个输出呢: Chelse还是Cmelse呢?
答案是Cmelse。 string.c_str是Borland封装的String类中的⼀个函数,它返回当前字符串的⾸字符地址。
const char*的值应该是个常量啊,怎么还能改变值呢?
这就是很多⼈遇到的坑⼉,也许⾯试的时候你会顺利的回答出来,但是在实际的⼯程中,往往掉进坑⼉⾥,难以⾃拔。
const char*, char const*, char* const的区别是什么?
const char*与char const*是等价的,指的是指向字符常量的指针,即指针可以改变指向但其指向的内容不可以改变。
⽽char* const相反,指的是常量指针,即指向不可以改变但指针指向的内容可以改变。因此这⾥的const char*指向的内容本类是不可以改变的。
那么这⾥为什么改变了呢?这跟str这个const char*的⽣命周期及string类的实现有关,string的c_str()返回的指针是由string管理的,因此它的⽣命期是string对象的⽣命期,⽽string类的实现实际上封装着⼀个char*的指针,⽽c_str()直接返回该指针的引⽤,因此string对象的改变会直接影响已经执⾏过的c_str()返回的指针引⽤。
3 总结
看下官⽅说法:
1. const charT* c_str() const;
2. Returns: A pointer to the initial element of an array of length size() + 1 whose first size() elements equal the corresponding
elements of the string controlled by *this and whose last element is a null character specified by charT().
3. Requires: The program shall not alter any of the values stored in the array. Nor shall the program treat the returned value as a
c++中string的用法valid pointer value after any subsequent call to a non-const member function of the class basic_string that designates the same object as this.
简⽽⾔之,调⽤任何 std::string 的⾮ const 成员函数以后,c_str() 的返回值就不可靠了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论