<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在工程中,我們也有很多時候用到string與char*之間的轉換,這里有個一我們之前提到的函數 c_str(),看看這個原型: ~~~ const char *c_str(); ~~~ c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同. 這就看到了吧,返回值是const char*,這里需要注意一下。 1 string轉const char* 當然是用到上面所述的方法c_str(): ~~~ string s1 = "abcdeg"; const char *k = s1.c_str(); cout<<k<endl; ~~~ 還有另一種方法: **data():與c_str()類似,但是返回的數組不以空字符終止。** 2 string轉char* 可以使用strcpy: ~~~ string s = "what fucking day"; char* c; constint len = s.length(); c =newchar[len+1]; strcpy(c,s.c_str()); ~~~ 也可以使用copy: ~~~ int main() { std::string foo("quuuux"); char bar[7]; foo.copy(bar, sizeof bar); bar[6] = '\0'; std::cout << bar << '\n'; } ~~~ 3 const char*轉string 4 char*轉string 簡單了: ~~~ char* c ="abc"; string s(c); ~~~ ================================================================ 上面提到了data和c_str的區別,那么究竟區別在哪呢? 二者原型: 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!”的字符串,如果不幸運,就會導致程序出現其他問題,總會有一些不可遇見的錯誤。總之不會是你預期的那個結果。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看