【发布时间】:2009-12-29 05:46:10
【问题描述】:
我被困了一个小时。我碰巧有一个字符串常量,里面有大约 280 个字符。
我试图使用 Pos 在长字符串常量中查找子字符串。当字符串长于 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 程序员的“错误”?
有人可以检查一下 Delphi 2010 现在是否为所有 >= 255 个字符的字符串或仅 256 个字符而不是 >= 257 个字符提供消息。
如果没有,我该如何在 Quality Central 引起注意?我什至不知道如何查看是否已报告该问题。
感谢您允许我发泄。
Kornel 的回答链接到一个论坛讨论,该讨论链接到 the bug report,它说它已在版本 14.0.3513.24210 中得到修复。
附言当 Delphi 2009 的 Unicode 字符串被引入时,您不认为 Embarcadero 应该取消 255 的限制吗?
【问题讨论】:
标签: delphi string delphi-2009 compiler-errors constants