德尔福的'字符串'文字怎么能超过255?

时间:2012-01-07 06:33:01

标签: string delphi size delphi-7

我正致力于 delphi 7 ,我正在研究字符串,我遇到了这个

  

对于一个默认长度的字符串,即简单地声明为字符串,max size始终为255.永远不允许ShortString增长到超过255个字符。

on delphi strings

一旦我必须在我的delphi代码中执行类似的操作(这是一个非常大的查询)

  var
    sMyStringOF256characters : string;
    ilength : integer;
    begin
       sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
       //length of sMyStringOF256characters is 256
    end;

我收到错误

  

[错误] u_home.pas(38):字符串文字最多可包含255个元素。

但是当我尝试这个时

    var
      iCounter              : integer;
      myExtremlyLongString  : string;
   begin
      myExtremlyLongString:='';
      Label1.Caption:='';
      for iCounter:=0 to 2500 do
         begin
            myExtremlyLongString:=myExtremlyLongString+inttostr(iCounter);
            Label1.Caption:=myExtremlyLongString;
         end;
         Label2.Caption:=inttostr(length(myExtremlyLongString));
   end; 

,结果是

enter image description here

正如您所看到的, myExtremlyLongString 的长度为 8894 个字符。

为什么delphi没有给出 myExtremlyLongString 的长度超过255的错误?

修改

SetLength(sMyStringOF256characters,300);

但它不起作用。

6 个答案:

答案 0 :(得分:33)

  

为什么delphi没有给出任何错误,说长度超过255   myExtremlyLongString?

长字符串(AnsiString)部分的文本中,您的答案有点失误。

  

在当前版本的Delphi中,字符串类型只是一个别名   AnsiString类型,

因此字符串不限于255个字符,而是字符串文字。这意味着您可以构建一个长度超过255个字符的字符串,但在代码中不能包含长度超过255个字符的字符串值。如果你愿意,你需要拆分它们。

sMyString:='ThisStringisofLength255'+'ThisStringisofLength255';

答案 1 :(得分:7)

将其拆分为:

sMyStringOF256characters := 
  'ThisStringis' +
  'ofLength256' +
  'And ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'CharactersCharactersCharactersCharactersCharactersCharactersCharactersCharacters';

答案 2 :(得分:4)

回到旧的DOS / Turbo Pascal时代,“字符串”的确限制在255个字符之内。在很大程度上,因为第一个字节包含字符串长度,而一个字节只能包含0到255之间的值。

在当代版本的Delphi中,这不再是一个问题。

“ShortString”是旧DOS / Pascal字符串类型的类型。

“LongString”长期以来一直是默认的字符串类型(包括我目前用于大多数制作工作的Borland Delphi 2006)。 LongStrings(又名“AnsiStrings”)保存8位字符,仅受可用内存的限制。

Delphi的最新版本(Delphi 2009及更高版本,包括新的Delphi XE2)现在都默认为多字节Unicode“WideString”字符串。像AnsiStrings这样的WideStrings在最大长度上也是有效的“无限”。

本文更详细地解释:

http://delphi.about.com/od/beginners/l/aa071800a.htm

答案 3 :(得分:2)

不同之处在于,在您的第一个代码示例中,您将字符串作为代码的一部分 - 文字字符串。这限制了它允许的字符数。

在第二个代码示例中,您将动态生成它,而不是将其作为一个大的文字字符串。

Delphi中的字符串类型(不像shorttring,最多只能达到255)可以和你的内存一样大。

答案 4 :(得分:1)

您可以尝试使用StringBuilder类:

procedure TestStringBuilder;
var
    I: Integer;
    StringBuilder: TStringBuilder;
begin
    StringBuilder := TStringBuilder.Create;
    try
        for I := 1 to 10 do
        begin
            StringBuilder.Append('a string ');
            StringBuilder.Append(66); //add an integer
            StringBuilder.Append(sLineBreak); //add new line
        end;

        OutputWriteLine('Final string builder length: ' + IntToStr(StringBuilder.Length));
    finally
        StringBuilder.Free;
    end;
end;

答案 5 :(得分:0)

如果你需要在Delphi中使用realy long字符串,你可以从其他资源加载它,比如txt文件或只是带有任何扩展名的纯文本。我正在使用它,它的工作原理。您可以使用纯文本行数创建“类似”数组表。在delphi代码中,你可以像@arjen van der Spek那样做,其他人只说。

对我来说,文本为var格式的文件 -

sometext:string=
'txt...'+
'txt...'+
'txt...';

对将来的编辑不利。

专业人士:您可以使用任何长文本。

缺点:文本代码是打开的,任何人都可以在记事本中读取它打开文件等。