2010-02-22 103 views
0

字符串中允許的最大字符數是多少?如果是這樣,字符數量的限制是多少?字符串中的最大字符數

+4

高依賴執行。如果您需要準確的答案,請指定您的操作系統,編譯器和STL實現。 – 2010-02-22 13:13:05

+1

聽起來像功課嗎? – 2010-02-22 15:58:58

回答

-2

假設你正在談論一個字符數組(而不是像std :: string之類的東西),那麼我相信極限是32768,這取決於編譯器。

UPDATE:
char str[32768];

宣佈對數組時,此限制不適用:
正如已經pionted給我看,這個限制在聲明堆棧,像這樣在一個磁盤陣列僅適用堆是這樣的:
char *str = new char[32769];

+2

-1:爲什麼會有這麼小的最大值? – 2010-02-22 13:09:01

+0

我記得試圖聲明一個比這更大的字符數組(在VC++ 6中,所以這是幾年前),我記得極限是數組中的32768個元素。 – Cameron 2010-02-22 13:12:56

+0

如果您使用語法「char myArray [32768]」分配數組,則將它分配到堆棧中。你的字符串受限於你使用的平臺的堆棧大小。但是,將這樣的大型結構放在堆棧上是一個壞主意。如果你把「char * myArray = new char [32768]」,你會發現你的數組可能會像你想要的那樣大,在你的平臺上整數大小的範圍內。 – Ant 2010-02-22 13:30:28

3

我們談論「C字符串」或std::string ...前者完全取決於你的緩衝區的大小。後者應該僅受可用內存量的限制。

+1

如何取決於緩衝區的大小是一個問題。當字符串很大時,std :: string不會將實際字符串存儲在堆棧中。 – 2010-02-22 13:12:17

+0

nobugz:我不太明白你的意思,你的第一句話是關於std :: string還是一個普通的緩衝區? – Skurmedel 2010-02-22 13:15:21

+1

std :: string的存儲將永遠不受堆棧大小的限制。 – 2010-02-22 13:23:17

6

對於std::string str,您可以獲得最大尺寸爲str.max_size()

要獲取當前分配的大小,請使用str.capacity()

+0

有趣......我想max_size就像它用於索引或其他東西的整數的最大值? – Skurmedel 2010-02-22 13:11:34

+2

max_size返回size_t,它是無符號整數,但它可能會更少,具體取決於實現我猜。有一個關於length_error異常的問題http://stackoverflow.com/questions/1183700/what-is-the-meaning-of-this-c-error-stdlength-error – 2010-02-22 13:15:20

+2

請注意,'max_size'是任何STL容器。同樣在大多數計算機上,您不受限於整數限制,而是受限於一次可以分配的內存塊的最大大小(如果我的內存服務於我,則每個進程的Windows不支持超過2GB)以及您的內存已經留在機器上了。 – 2010-02-22 14:59:56

1

我的理解是,C風格字符串中的最大字符數是size_t類型的容量。該標準定義了size_t,以便能夠處理給定平臺上的最大尺寸。可能存在較小的限制,例如可用於存儲文本的內存(可以是隻讀或可寫)。

根據std::string(C++字符串),極限值由std::string::size_type類型可以容納的最大值指定。這在平臺和翻譯人員中有所不同。同樣,這個數量可能會被平臺存儲字符串的能力降低。

一些新手已經能夠聲明10 MB字符串來處理文件。