std::string 是否明確具有空終止符?
在 C 和 C 中,空字元 ' ' 用於終止字串。然而,在 C 的 std::string 類型的上下文中,答案稍微微妙一些。
預設行為
預設情況下, std::string物件不包含空終止符。這是因為 std::string 管理自己的記憶體並在內部追蹤字串的長度。因此,作業系統不知道字串的長度,並且嘗試存取超出字串末尾(包括空終止符)的記憶體可能會導致未定義的行為。
使用c_str()
但是,如果您使用c_str() 方法專門請求std::string 的空終止字元數組表示形式,則傳回的數組將包含空終止符。這是因為 c_str() 傳回一個指向 std::string 所建立的臨時數組的指標。
直接加入空字元
需要注意的是,可以像任何其他字元一樣手動將空字元插入到 std::string 中。但是,這不會影響字串本身的行為。 std::string 仍將管理其記憶體並在內部追蹤其長度,並且存取字串末尾之外的記憶體(即使存在空字元)可能會導致不可預測的結果。
範例
以下程式碼示範了這一點行為:
string s("hello"); cout << s.size() << ' '; s[1] = '<pre class="brush:php;toolbar:false">5 5
輸出:
輸出:如您所愛參見,在索引1 處插入空字元不會更改s.size()報告的字串大小,表示std::string本身沒有對空字元進行特殊處理。以上是`std::string` 是否自動包含空終止符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!