」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > C++11 的 `string::c_str()` 仍然以 Null 終止嗎?

C++11 的 `string::c_str()` 仍然以 Null 終止嗎?

發佈於2024-11-08
瀏覽:216

Is C  11\'s `string::c_str()` Still Null-Terminated?

C 11 的 string::c_str() 是否消除空終止?

在 C 11 中,string::c_str 不再保證產生一個以 null 結尾的字串。

原因:

在C 11 中,string::c_str 的定義與string::data 相同,而string::data 又被定義相當於*( begin() n) 0

後果:

這意味著string::c_str() 可能不再返回以null 結尾的字串,在假設此類終止的情況下會導致潛在錯誤。

解決方案:

解決方案是僅將 string::c_str() 用於與遺留程式碼的兼容性。對於新程式碼,請使用 string::data() 來取代。雖然 string::data() 不傳回以 null 結尾的字串,但它會傳回一個指向基礎緩衝區的指針,該緩衝區在內部保證以 null 結尾。

實作細節:

在內部,字串現在需要使用以 null 結尾的緩衝區。第 21.4.5 節中的 operator[] 定義要求,對於 size()

附加說明:

  • &operator[](0) 可用作 c_str() 的同義詞。
  • 終止空字元必須位於與字串資料相同的緩衝區,因為 *(p size()) 必須等於 charT()。因此,即使延遲初始化空字符,也不可能觀察處於中間狀態的緩衝區。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3