Delphi 2009 Win32。
下面的代码尝试将257长度的字符串添加到备忘录中。 它编译并运行正常,但备忘录中没有添加任何内容。
Memo1.Lines.Add('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
看起来像编译器错误。是吗?因为如果字符串长256,我会收到编译错误,无法编译应用程序。
当开发人员试图做这样的事情时,有什么方法可以让应用程序中断?
我知道我可以拆分字符串并使这段代码正常工作,但我的意思是阻止开发人员使用这些无效代码而不注意。
由于
答案 0 :(得分:14)
这是一个带字符串文字的Delphi 2009错误,它应该引发与D2007相同的错误。
尝试最新版本的Andreas IDE Fix Pack,它可以解决这个问题。 http://andy.jgknet.de/blog/?page_id=246
答案 1 :(得分:2)
我同意Gamecat,但如果你处理的字符串很大,我会打破它 进入多条线以协助阅读/编辑。
如果你是LITTERALLY试图创建257“a”,那么为什么不在StrUtils单元中使用DupeString函数呢?
Memo.Lines.Add( DupeString('a',257) );
更容易阅读,并在以后维护。如果您在循环中执行此操作并因此担心性能,则将函数结果分配给局部变量并使用该变量。
var
sLotsOfAs : string;
ix : integer;
begin
sLotsOfAs := DupeString('a',257);
for ix := 0 to 1000000 do
Memo.Lines.Add( sLotsOfAs );
end;
答案 2 :(得分:1)
字符串文字长度只能为255个字符。不确定为什么他们保留这个限制。但是您可以使用多个文字来解决它:
Memo1.Lines.Add('i have 128 chars' + 'i also have 128 chars').
答案 3 :(得分:0)
我不知道D2009,但至少在Delphi 6下,字符串文字限制为255个字符,编译器会诊断错误。
答案 4 :(得分:0)
在Delphi 2007中,我得到:
[DCC Error] Unit1.pas(29): E2056 String literals may have at most 255 elements
在Delphi 5中,我得到:
[Error] Unit1.pas(29): String literals may have at most 255 elements
如果D2009的行为与你描述的一样,那么我会想到两件事:
1 - 他们扩大了字符串中字符数量的限制,但TMemo仍然只能接受最多255个。
或
2 - 这是一个普通的老bug
就防止它而言,我唯一能想到的是制作一个正则表达式来搜索.PAS文件中的这些字符串。