2012-01-20 65 views
2

我見過的教程是使用字符數組來演​​示一個字符串對象。例如thees教程:C++爲什麼在教程中使用有關字符串的字符數組?

http://www.cplusplus.com/reference/string/string/copy/

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

我看到沒有使用字符數組,以證明某事的教程。在學校,老師也不使用任何陣列。對於我來說,在閱讀本教程時首先使用數組有點困惑(知道我仍然是C++的初學者)。

我只是想知道爲什麼有教程使用char數組來顯示一個或多個字符串對象可以做的事情。

回答

6

在字符數組中存儲字符串是用C語言表示字符串的原始方式。在C中,一個字符串是一個char類型的數組。數組的大小是字符數+ 1。+1是因爲C中的每個字符串都必須以字符值0結尾。這是NULL終止符或終止符。

C風格的字符串在C++中是合法的,因爲C++旨在向後兼容C.另外,許多庫和現有代碼庫都依賴於C風格的字符串。

這是一個關於C風格字符串的教程。 http://www.cprogramming.com/tutorial/c/lesson9.html

參考:要將C++字符串轉換爲C風格字符串,請調用方法c_str()。

+2

此外,許多人不知道C和C++之間的區別,並且您在網上找到的大多數教學信息都是錯誤的。 –

2

在C和C++中,字符串被異常地表示爲'\0'終止數組char。使用C++,您可以使用標準類string,但在表示字符串時,這絕不是「自然」的事情。許多C和C++程序仍然使用一組數字char

+0

我並不感到驚訝。事實上,我懷疑這個原因。 – AlexSavAlexandrov

+2

'std :: string'是一種更自然的方式來做到這一點,並且沒有人滿足於null結尾的字符串 - 他們根本無法承擔重寫他們的程序來擺脫它。 – Puppy

+0

@DeadMG:我的意見是你的意見。許多需要處理「字符串」並用c/C++編寫的應用程序不需要std :: string的開銷。而且還有程序員,特別是與微控制器一起工作的開發人員,他們仍然使用char數組,並且不會抱怨。 – Mithrandir

0

STL出現時出現了字符串,當我記得的時候,C++標準在90年代的某個地方形成了。在那之前(例如我的學校仍然使用的Turbo C++ ......不幸的是),C++中沒有'string'對象,所以每個人都使用char數組。它們仍然被廣泛使用,因爲字符串並沒有真正引入許多字符數組無法做到的新事物,並且許多人不喜歡它們。字符串實際上是空字符結構數組,但它們隱藏在類後面。

字符串的一個問題是並不是所有的庫函數都支持它們。例如,printf系列函數atoi(它來自'ascii to integer',也包含atof和所有其他文件),但它們不支持字符串。另外,在大型項目中,有時需要使用C語言,並且C中不存在字符串,只能使用char數組。

關於字符串的好處是,它們的實現方式非常容易將字符串轉換爲字符數組。

+0

[std :: string是STL的一部分嗎?](http://stackoverflow.com/questions/5972546/is-stdstring-part-of-the-stl)可能是一個有趣的讀取。我相信你的意思是stdlib,或者標準庫,它不是* STL。 – Xeo

+1

字符串引入了幾個「char」陣列無法實現的性能,安全性和封裝。哦,我忘了是否是通用的?所有'atoi'函數都有C++等價物。 – Puppy

+0

那麼,它仍然使用容器,所以它取決於STL ...足夠接近。這是一個非常有爭議的事實。 – Tibi

1

看到了Bjarne Stroustrup的論文「學習標準C++當作一門新語言」 www2.research.att.com/~bs/new_learning.pdf

+0

我想這個答案意味着在本書中有一個算法可以解釋我的問題。對? – AlexSavAlexandrov

+0

這不是一本書,它是一篇論文(只有11頁)。 Bjarne是C++的創造者。 在本文中,Bjarne解釋瞭如何使用C++作爲一種新語言,而不是以C++方式編程。 我不知道如果回答你的問題,但可以引導你在C++中的最佳編程實踐,避免C容易出錯的結構。 –

相關問題