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()
附加說明:
以上是C 11 的 `string::c_str()` 仍以 Null 終止嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!