2015-06-20 143 views
-2

這個問題是從破解編碼面試書,問題狀態 - 寫一個程序來反向空終止的字符串;這個術語只存在於C/C++中嗎? 「null terminated string」和Java中常用的字符串有什麼區別?什麼是空字符串?

+1

https://en.wikipedia.org/wiki/Null-terminated_string – ultranaut

+0

我建議避免使用術語「C/C++」。 C和C++是兩種不同但密切相關的語言。只要說「C和C++」或「C或C++」即可。 –

回答

0

以空字符結尾的字符串是由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中的字符串。

+0

'NULL'是一個空指針常量。爲避免混淆,請不要使用該名稱來引用空字符。 'NUL'是空字符的通用名稱 - 或者只是將其稱爲''\ 0''。 –

+0

謝謝。糾正。這是一個自動更正的替代品:) – dman2306

1

以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的字符串類型不太熟悉,但我認爲它是相似的。一個好處是你可以在字符串中間有空字符;另一個是你可以在不搜索空終止符的情況下確定長度。

相關問題