首頁 > 後端開發 > C++ > 在 C 中使用 `&s[0]` 存取 std::string 中的連續字元安全嗎?

在 C 中使用 `&s[0]` 存取 std::string 中的連續字元安全嗎?

Mary-Kate Olsen
發布: 2024-12-05 02:57:09
原創
999 人瀏覽過

Is Accessing Contiguous Characters in std::string Using `&s[0]` Safe in C  ?

訪問std::string 中的連續字元

C 中可能會遇到以下程式碼:

std::string s;
s.resize(strLength);
memcpy(&s[0], str, strLength);  // Is this safe?
登入後複製

雖然在std::vector 中使用&s[0] 是安全的,但在std::string中使用它會引起擔憂。本文檢查了所提供程式碼的安全性。

在 C 98/03 中,不保證 std::string 的分配是連續的。然而,C 11 要求連續性。實際上,所有已知的實作都使用連續儲存。

此外,C 11 標準保證 &s[0] 的安全,即使對於空字串也是如此。這是因為std::string 的operator[] 定義為:

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
登入後複製

此外,data() 定義為:

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

因此, &s[0] 提供指向字串首字符的有效指針。

注意: 在標準化之前,存取&s[0] 對於空字串是未定義的行為。不過,這個問題已在後來的標準草案中解決。

以上是在 C 中使用 `&s[0]` 存取 std::string 中的連續字元安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板