它让我坚持了一个小时。我恰好有一个字符串常量,其中有大约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限制吗?
是的,我知道如何解决它。这不是问题。我想我只是感到不安,德尔福没有警告我这一点,我不得不开始调试,以找到问题的根源。但是我使用了无限长的默认Unicode字符串。我的假设是德尔福2009年也会有无限长的字符串常量。将它们留在255个字符就像限制行长度到80列,因为这是计算机卡的限制。 :-P – lkessler
我扩大了我的答案:) –
Kornel:感谢您的安迪的IDE修订包的链接。我以前从来没有听说过。它看起来像纠正了Update 3中的一些非常严重的错误(如慢速调试)。在安装它之后,较长的字符串常量现在报告为错误。 – lkessler