Delphi默默地裁剪字符串文字

时间:2009-03-27 12:01:46

标签: delphi delphi-2009

Delphi 2009 Win32。

下面的代码尝试将257长度的字符串添加到备忘录中。 它编译并运行正常,但备忘录中没有添加任何内容。

Memo1.Lines.Add('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');

看起来像编译器错误。是吗?因为如果字符串长256,我会收到编译错误,无法编译应用程序。

当开发人员试图做这样的事情时,有什么方法可以让应用程序中断?

我知道我可以拆分字符串并使这段代码正常工作,但我的意思是阻止开发人员使用这些无效代码而不注意。

由于

5 个答案:

答案 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文件中的这些字符串。