string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。
c_str函数的返回值是const char*的,不能直接赋值给char*。
c++语言提供了两种字符串实现,其中较原始的一种只是字符串的
c语言
实现。与C语言的其他部分一样,它在c++的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。
标准头文件<cstring>包含操作c-串的函数库。这些
库函数
表达了我们希望使用的几乎每种字符串操作。 当调用
库函数
,客户程序提供的是
string类
型参数,而
库函数
内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供了这样一种方法,它返回const char*类型(可读不可改)的指向字符
数组
的
指针
。
注:
①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:
const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //输出:1234 s="abcd"; cout<<c<<endl; //输出:abcd
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd
其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。
注意:不能再像上面一样①所示了,const还怎么向里面写入值啊;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。