首頁 > 後端開發 > C++ > 主體

C 11 的 `string::c_str()` 仍然保證以 Null 結尾的字串嗎?

Mary-Kate Olsen
發布: 2024-10-27 15:35:02
原創
343 人瀏覽過

 Does C  11's `string::c_str()` Still Guarantee a Null-Terminated String?

C 11 的 string::c_str() 函數不再以 Null 結尾嗎?

在 C 中, basic_string 類別提供了各種方法存取其字元。其中一個方法 c_str() 自 C 11 以來一直是混亂的根源。在 C 11 之前,c_str() 負責傳回表示字串內容的以 null 結尾的字元陣列。

但是,在 C 11 中,basic_string::c_str() 的定義已更改。現在它被定義為與 basic_string::data 相同,後者返回一個指向字串內部字元緩衝區開頭的指標。這提出了一個問題:此更改是否意味著 c_str() 不再保證以 null 結尾的字串?

答案:字串內部需要以 null 結尾的緩衝區

這個問題的答案是否定的。儘管 C 11 中發生了變化,字串仍然需要在內部使用空終止緩衝區。這從C 標準中的operator[]方法(21.4.5)的定義中可以明顯看出:

Requires: pos <= size().
Returns: *(begin()+pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified.
登入後複製

c_str() 是根據operator[]定義的:

Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
登入後複製

由於c_str() 和data 都需要O(1) 運算,因此實際上強制實作使用以null 結尾的緩衝區。此外,operator[] 的回傳值要求可確保 c_str() 傳回指向以 null 結尾的緩衝區的指標。因此,儘管 C 11 中發生了變化,c_str() 仍然提供以 null 結尾的字串。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!