日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/4/5 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 串转string_c++ 中 char 与 string 之间的相互转换问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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!"的字符串,如果不幸運,就會導致程序出現其他問題,總會有一些不可遇見的錯誤??傊粫悄泐A期的那個結果。

strcpy

C語言標準庫函數strcpy,把從src地址開始且含有'\0'結束符的字符串復制到 ?以dest開始的地址空間。

總結

以上是生活随笔為你收集整理的c 串转string_c++ 中 char 与 string 之间的相互转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。