c++ string.c_str()小结

c++

const char *c_str();
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。


操作c_str()函数的返回值时,只能使用c字符串的操作函数,如:strcpy()等函数.因为,string对象可能在使用后被析构函数释放掉,那么你所指向的内容就具有不确定性.

{

string var = "Olympic";

char *ptr = var.c_str();

}//还不能被编译,因为va.c_str()返回临时指针,赋值给ptr之后,在}结束之后,var对象就得析构,最后要使用ptr,就是垃圾内容

 

一,C语言的字符串

在C语言里,对字符串的处理一项都是一件比较痛苦的事情,因为通常在实现字符串的操作的时候都会用到最不容易驾驭的类型——指针。

比如下面这个例子:

//example 1:

char str[12] = "Hello";

char *p = str;

*p = 'h';  //改变第一个字母

 

//example 2:

char *ptr = "Hello";

*ptr = 'h';  //错误

 

第一个字符串时用数组开辟的,它是可以改变的变量。而第二个字符串则是一个常量,也就是字面值。ptr只是指向它的指针而已,而不能改变指向的内容。

要想通过指针来改变常量是错误,正确的写法应该是用const指针。

const char *ptr = "Hello";

二,初识string类

正是因为C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件<string>。注意<string.h>和<cstring>都是错误的,这两个头文件主要定义C风格字符串操作的一些方法,譬如strlen(), strcpy()等。第一个是C的头文件格式,而第二个是C++风格的头文件,但是和<string.h>是一样的,它的目的是为了和C兼容。

看下面例子:

//example 3:

string str("world");   //可以用C风格字符串初始化

string words = "Hello";

string greet = words;

string  join = greet + words;  //可以像基本类型一样操作

posted @ 2015-04-28 10:01  kkshaq  阅读(21412)  评论(0编辑  收藏  举报