回答
std::string
非常多std::vector
:它有一個長度屬性,並不是以C++ 03結尾的零;在C++ 11'std :: string'似乎被終止,但我覺得'std :: string'作爲字符的'std :: vector'並不僅僅是一個終止的緩衝區。
此外,'c_str()'可用於獲取C型空字符結束的字符串。 – Naveen
它不像「不」那麼簡單。在'[begin(),end())'之間不需要終止,但是'c_str()'和'data()'返回一個指向空終止數組的指針。 – juanchopanza
@juanchopanza僅限於C++ 11。 –
的std :: string ::數據
將指針返回到包含字符的相同序列組成的字符串對象的值的字符的數組。
訪問data()+ size()處的值會產生未定義的行爲:不能保證null字符終止由此函數返回的值指向的字符序列。有關提供這種保證的函數,請參閱string :: c_str。
程序不得更改此序列中的任何字符。
在C++ 11中,'data()'和'c_str()'實際上是相同的 - 兩者都將以NULL結尾。 –
+1 @CoryNelson謝謝,Cx11 std :: string :: data:返回一個數組的指針,該數組包含一個表示字符串對象當前值的以空字符結尾的字符序列(即C字符串)。 此數組包含組成字符串對象的值的相同字符序列,並在末尾加上附加的終止空字符('\ 0')。 指針返回指向字符串對象當前使用的內部數組,以存儲符合其值的字符。 string :: data和string :: c_str都是同義詞,並返回相同的值。 –
在C++ 03中,std :: string不需要存儲在NUL終止的緩衝區中,但是如果調用c_str()
它將返回一個指向NUL終止的緩衝區的指針。該緩衝區可以在c_str()
調用中合法創建和/或終止。
在C++ 11,所有std::string
實例被終止,所以data()
還解決一個NUL封端的緩衝器,並且甚至s[s.size()]
具有良好定義的含義返回到終止NUL的參考。
因此,它歸結爲你想與哪種語言接口?如果您需要與C函數接口,請使用c_str()來獲取指向以空字符結尾的字符數組的指針。如果您需要與另一個C++函數進行交互,那麼可能需要std :: string,但不能保證以null結尾(如果您需要迎合C++ 03)。 – Keplerian
@Keplerian:當通過'const char *'調用需要ASCIIZ緩衝區的C函數時,確實會使用'c_str()',並可能使用'&s [0],s.size()'傳遞一個(non- const)'char *'和'size_t'到計劃修改緩衝區內容的C函數 - 但在C++ 11之前,它不能保證NUL終止,你必須首先檢查'!s.empty()'以避免' &s [0]'未定義的行爲。對於期望'std :: string'的其他C++函數,你不應該向他們保證任何有關NUL終止的事情,因爲它們大概會使用'.size()','.end()'等。 –
也[我的答案在這裏](http://stackoverflow.com/questions/347949/how-to-convert-a-stdstring-to-const-char-or-char/4152881#4152881)。 –
- 1. 檢查字符串的末尾是否爲空白字符
- 2. 空字符串在末尾有「\ u0000」
- 3. 字符串末尾多餘的空格
- 4. 替換字符串末尾的字符?
- 5. EditText末尾的字符串
- 6. C#字符串類:沒有辦法將字符推到字符串的末尾?
- 7. 從字符串末尾刪除字符
- 8. 在字符串C++的末尾比較字符
- 9. C++ c_str在字符串末尾添加奇怪的字符
- 10. 字符串末尾的字符串的子串
- 11. 從字符串數組中的字符串末尾刪除「,」
- 12. 的bash腳本 - 從字符串末尾除去尾隨字符
- 13. 子串從字符串末尾的字符串
- 14. 從字符串末尾刪除^符號
- 15. jQuery驗證字符串末尾的空字符的輸入字段?
- 16. 字符串中的C字符串指針如何以空字符結尾?
- 17. 如何從字符串的末尾刪除子字符串
- 18. 在字符串末尾的Python單獨匹配字符串
- 19. 字符串末尾的修飾字符串
- 20. 字符串操作 「^」 顯示字符串消息的末尾
- 21. 對象是c中的字符串[]#
- 22. 將字符串中的重複字符移動到末尾
- 23. 如何在Perl中的字符串末尾替換字符?
- 24. 僅替換字符串的末尾
- 25. 檢查在字符串末尾的子
- 26. 字符串末尾的增量編號
- 27. 刪除字符串末尾的新行
- 28. 字符串末尾的變量
- 29. 追加到字符串的末尾Ramda.js
- 30. 刪除字符串末尾的'/'?
'null'!='NUL'! – trojanfoe
相關:http://stackoverflow.com/questions/6077189/will-stdstring-always-be-null-terminated-in-c11 – jogojapan