這個問題是從破解編碼面試書,問題狀態 - 寫一個程序來反向空終止的字符串;這個術語只存在於C/C++中嗎? 「null terminated string」和Java中常用的字符串有什麼區別?什麼是空字符串?
什麼是空字符串?
回答
以空字符結尾的字符串是由NUL字符(ASCII碼0)終止的字符串。在C中,沒有字符串數據類型。你有字符。那麼你如何製作一個字符串呢?那麼它基本上只是一個字符數組!現在,這裏的樂趣。所以在OO語言中,像Java數組是具有Length或Count屬性或類似的東西的對象(名稱因語言/實現而異)。在C中,它只是一個字符列表。那麼,我們怎麼知道我們已經達到了字符串的末尾呢?當我們遇到NUL字符時(字節值爲0)。這讓我們知道我們正處在字符串的末尾。
說到OO語言,它們可能以NUL結尾(或提供一種方法來檢索C兼容的以null結尾的版本),但它們可能不是因爲它們可以使用內部的Length/Count變量來保留跟蹤字符串的長度。另外,我會說你比C/C++更「C」,因爲在C++中,你有std :: string類,它比Java中的字符串更像C中的字符串。
'NULL'是一個空指針常量。爲避免混淆,請不要使用該名稱來引用空字符。 'NUL'是空字符的通用名稱 - 或者只是將其稱爲''\ 0''。 –
謝謝。糾正。這是一個自動更正的替代品:) – dman2306
以null結尾的字符串是由空字符('\0'
)字符結尾的字符串(一系列字符)。
C標準一個串定義爲(引用[N1570])http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)7.1.1),爲:
甲串是由封端的字符的連續序列,並且包括第一個空字符。
其中空字符是一個值爲0
一個字符(不與數字'0'
混淆)。
C標準庫中的許多函數需要的參數是指向字符串(定義爲指向字符串的初始字符的指針)的指針。如果使用一個參數來調用這樣一個函數,該參數是一個指向字符數組元素的指針,但該數組不包含空字符,則行爲是未定義的。該函數可能會讀取超出數組末尾的內存,直到碰巧到達內存中的0字節,或者直到它崩潰。
這是表示任意長度字符串的幾種方法之一。另一種方法是將字符串的長度與其內容一起存儲爲整數。某些版本的Pascal在字符串的開頭使用一個字節長度,將最大長度限制爲255字節。
C++,它繼承串及其標準庫的C'S的定義,也有實現std::string
,更抽象的類型,可以讓你對字符串,而不必擔心他們是如何操作表示庫類。我對Java的字符串類型不太熟悉,但我認爲它是相似的。一個好處是你可以在字符串中間有空字符;另一個是你可以在不搜索空終止符的情況下確定長度。
- 1. 爲什麼字符串總是空的?
- 2. Ruby:空字符串和空字符串有什麼不同?
- 3. 爲什麼s [0]是C++中空字符串s的空字符串?
- 4. 什麼是以空字符結尾的字符串?
- 5. 反字符串程序中的空字符是什麼?
- 6. 什麼是unicode字符串?
- 7. 什麼是Uri字符串?
- 8. 什麼是C#字符串
- 9. 簡單的JavaScript空字符串檢查,(空字符串)是什麼意思,爲什麼它失敗?
- 10. 爲什麼每個字符串都有空字符串?
- 11. 分裂()沒什麼=空字符串
- 12. 爲什麼字符串可以爲空?
- 13. 空字符串+變量:爲什麼?
- 14. 爲什麼[] + []返回空字符串?
- 15. 爲什麼subprocess.popen返回空字符串
- 16. 爲什麼regex.Match返回空字符串?
- 17. 爲什麼undef變成空字符串?
- 18. 這是空字符串是什麼意思?
- 19. 字符串... <varname>什麼是字符串...意思是
- 20. 什麼是(字符空格字符)或(空格字符空格),在JavaScript
- 21. 爲什麼連接到非空字符串的空字符串評估爲null?
- 22. 什麼是二進制空字符?
- 23. 什麼是日語的空白字符?
- 24. 什麼是空數組項的有效查詢字符串?
- 25. Rome getAuthor()總是返回空字符串。爲什麼?
- 26. Tcl:什麼是檢查空白字符串的最快方法
- 27. 爲什麼我的連接字符串是空
- 28. 這是爲什麼返回一個空字符串?
- 29. 什麼是拆分後我的readline()的空字符串
- 30. 爲什麼這個BufferedReader返回空字符串而不是null?
https://en.wikipedia.org/wiki/Null-terminated_string – ultranaut
我建議避免使用術語「C/C++」。 C和C++是兩種不同但密切相關的語言。只要說「C和C++」或「C或C++」即可。 –