首頁  >  文章  >  後端開發  >  C 11 的 `string::c_str()` 仍以 Null 終止嗎?

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

Susan Sarandon
Susan Sarandon原創
2024-10-27 00:52:02236瀏覽

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() 的同義詞。
  • 終止空字元必須位於同一個字元中buffer 作為字串數據,因為 *(p size()) 必須等於 charT()。因此,即使延遲初始化空字符,也不可能在中間狀態下觀察緩衝區。

以上是C 11 的 `string::c_str()` 仍以 Null 終止嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn