c++ 中 char 与 string 之间的相互转换问题

您所在的位置:网站首页 string转换成char c++ 中 char 与 string 之间的相互转换问题

c++ 中 char 与 string 之间的相互转换问题

2022-05-03 08:47| 来源: 网络整理| 查看: 265

string::c_str()、string::data()的区别:

const value_type *c_str( ) const;

const value_type *data( ) const;

 

data只是返回原始数据序列,没有保证会用traits::eos(),或者说'\0'来作字符串结束.   当然,可能多数实现都这样做了。   

c_str是标准的做法,返回的char*   一定指向一个合法的用'\0'终止的C兼容的字符串。   所以,如果需要C兼容的字符串,c_str  是标准的做法,data  并不保证所有STL的实现的一致性。

 

你或许会问,c_str()的功能包含data(),那还需要data()函数干什么?看看源码:const charT* c_str () const{

   if  (length () == 0)

        return "";

   terminate ();

   return data ();

}原来c_str()的流程是:先调用terminate(),然后在返回data()。因此如果你对效率要求比较高,而且你的处理又不一定需要以\0的方式结束,你最好选择data()。但是对于一般的C函数中,需要以const char*为输入参数,你就要使用c_str()函数。对于c_str() data()函数,返回的数组都是由string本身拥有,千万不可修改其内容。其原因是许多string实现的时候采用了引用机制,也就是说,有可能几个string使用同一个字符存储空间。而且你不能使用sizeof(string)来查看其大小。详细的解释和实现查看Effective STL的条款15:小心string实现的多样性。另外在你的程序中,只在需要时才使用c_str()或者data()得到字符串,每调用一次,下次再使用就会失效,如:string strinfo("this is Winter");...//最好的方式是:foo(strinfo.c_str());//也可以这么用:const char* pstr=strinfo.c_str();foo(pstr);//不要再使用了pstr了, 下面的操作已经使pstr无效了。strinfo += " Hello!";foo(pstr);//错误!会遇到什么错误?当你幸运的时候pstr可能只是指向"this is Winter Hello!"的字符串,如果不幸运,就会导致程序出现其他问题,总会有一些不可遇见的错误。总之不会是你预期的那个结果。

 

 strcpy

C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制  到  以dest开始的地址空间。

 

   

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3