2011-08-28 132 views

回答

5

C和C++中的傳統字符串使用空終止符來指示字符串的結尾。由於字符串指針只是指向一個字符數組,而沒有任何長度或其他元數據,所以空終止符是確定字符串長度的唯一方法。

至於爲什麼這樣做,這是更難回答的問題。存儲字符串數據的方法很多,這只是其中之一。

+0

AFAIK當時的基本原理是「如果我們在前面存儲一個固定的大小,它應該有多少個字節?」。一個是非常有限的,兩個不會好很多,但是對於短的字符串會浪費。 – Flexo

0

存儲原始字符串有兩種基本技術,一種是在頭文件中存儲長度,另一種是在結尾處使用零終止符。

C語言的設計師選擇後者。這就是爲什麼。 C++只是繼承了這個,並且std::string使用這種技術,所以c_str()是O(1)。注:我不知道標準是否需要這個,甚至不關心。

0

一個字符串可以被認爲是一個可變長度字段。保持計數的地方需要一定的格式,例如首先存儲長度然後輸入字符串(就像ID3v2標籤中的幀頭)。保留終結符字符以標記變長字段的結尾是另一種方法。 C已經選擇這種方式來標記字符串字段的終止。取決於我們如何解釋位和字節序列。

0

不是一個正式的答案,但我可以估計C(以及後來的C++)具有以零結尾的字符串的原因是因爲如果加載到內存中的值爲零(只需一個機器指令即可) 。那就是,它只有一個字節,與Pascal字符串相反,字符串限制爲255個字符而不添加另一個字節。

相關問題