String中c_str()的用法

   
   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 char* c; //① 
//char* c;       //② 
//char c[20];  
char* c=new char[20]; 
string s="1234"; 
//c = s.c_str();  
strcpy(c,s.c_str()); 
cout<<c<<endl; //输出:1234 
s="abcd"; 
cout<<c<<endl; //输出:1234 

注意:不能再像上面一样①所示了,const还怎么向里面写入值啊;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。

原文链接: https://www.cnblogs.com/lumanman/p/3297093.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    String中c_str()的用法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/102319

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午6:37
下一篇 2023年2月10日 上午6:42

相关推荐