C 11 的 string::c_str() 是否消除空終止?
在C 11 中,string::c_str 不再保證產生一個空終止的string.
原因:
在C 11 中, string::c_str 定義為與string::data 相同,而string::data 又被定義為等價於*( begin() n) 0
後果:
這意味著string::c_str() 可能不再返回以空結尾的字串,在假設這種情況的情況下會導致潛在的錯誤Termination.
解決方案:
解決方案是僅使用string::c_str() 來與遺留程式碼相容。對於新程式碼,請使用 string::data() 來取代。雖然 string::data() 不傳回以 null 結尾的字串,但它會傳回一個指向基礎緩衝區的指針,該緩衝區在內部保證以 null 結尾。
實作細節:
在內部,字串現在需要使用以 null 結尾的緩衝區。第 21.4.5 節中的 operator[] 定義要求,對於 size()
附加說明:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3