2009-12-29 15 views
1

它讓我堅持了一個小時。我恰好有一個字符串常量,其中有大約280個字符。Delphi 2009爲什麼不給字符串常量太長的消息?

我試圖用波什找了很久字符串常量內的字符串。它在字符串長度超過255個字符時給出結果0,但在字符串較短時給出正確的結果。

例如:

pos('5', '123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.12345') 

正確含255個字符返回數字5.

pos('5', '123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456') 

含256個字符給出了一個編譯器錯誤: [DCC錯誤] E2056字符串文本可以具有至多255元素。

pos('5', '123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.1234567') 

但257個以上的字符不產生任何消息和錯誤地返回這使我在白費力氣了,而數字0

我也發現了同樣如此簡單的賦值爲一個字符串,例如:

S1 :='123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456'; 

給出了錯誤信息,將無法編譯。

但添加一個或多個字符,和S1被分配一個空字符串。

有,應該在警告我的這個打開一個Delphi選項,或者這只是一個「錯誤」由Embarcadero公司的程序員?

可能有人請檢查是否德爾福2010現在提供了一個消息的所有字符串> = 255個字符,或者只是256個字符,而不是爲那些> = 257

如果沒有,我怎麼去得到它在Quality Central注意到?我甚至不知道如何查看是否報告了這個問題。


謝謝你讓我發泄。

科內爾的答案鏈接到鏈接到the bug report,指出它已被固定在構建14.0.3513.24210論壇討論。


p.s.難道你不認爲Embarcadero在Delphi 2009的Unicode字符串被引入時應該消除255限制嗎?

回答

3

您是使用AnsiStrings還是ShortStrings? ShortStrings(字符串)的長度有一個上限,AnsiStrings不會(它們以null結尾)。或者,您是否嘗試過使用{$H+}(默認爲AnsiStrings)編譯?

,並得到了不斷的長度限制,使用"split longer into addition" + "of shorter strings under 255 chars"

此外,還有對德爾福支持論壇here類似的討論。

我認爲文字不能長的原因是因爲編譯器將它們存儲爲短字符串(而不是將它們分配在堆上),因此單字節大小的長度限制位於此處。

至於爲什麼德爾福沒有報告......嗯,這是一個known bug,據說已被修復,甚至有一個compiler patch

+0

是的,我知道如何解決它。這不是問題。我想我只是感到不安,德爾福沒有警告我這一點,我不得不開始調試,以找到問題的根源。但是我使用了無限長的默認Unicode字符串。我的假設是德爾福2009年也會有無限長的字符串常量。將它們留在255個字符就像限制行長度到80列,因爲這是計算機卡的限制。 :-P – lkessler

+0

我擴大了我的答案:) –

+0

Kornel:感謝您的安迪的IDE修訂包的鏈接。我以前從來沒有聽說過。它看起來像糾正了Update 3中的一些非常嚴重的錯誤(如慢速調試)。在安裝它之後,較長的字符串常量現在報告爲錯誤。 – lkessler

0

Delphi對於字符串常量的限制爲255個字符。你可以延長它的長度,我認爲通過使用+一起凝聚在一起,但是基於在pascal和Delphi 1中所有字符串被限制爲最多255個字符這一事實的一個非常舊的限制。

令人討厭但很容易解決。

+0

只有Delphi 1有255個字符限制。在Delphi 2(第一個32位版本)中字符串發生了變化,以允許更長的長度。 –

+0

已更新以反映該情況。 –