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

Pre*_*ias 25 delphi string size delphi-7

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

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

关于delphi字符串

一旦我必须在我的delphi代码中做这样的事情(这是一个非常大的查询)

  var
    sMyStringOF256characters : string;
    ilength : integer;
    begin
       sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
       //length of sMyStringOF256characters is 256
    end;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

[错误] 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; 
Run Code Online (Sandbox Code Playgroud)

结果是

在此输入图像描述

如您所见,myExtremlyLongString的长度为8894个字符.

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

编辑 我用过

SetLength(sMyStringOF256characters,300);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Mik*_*son 34

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

你在Long String(AnsiString)部分的文本中有一点你的答案.

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

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

sMyString:='ThisStringisofLength255'+'ThisStringisofLength255';
Run Code Online (Sandbox Code Playgroud)

  • 2019 年你好,我很遗憾地告诉你这仍然是真实的:-( 但感谢你的回答! (3认同)

Arj*_*pek 8

将其拆分为:

sMyStringOF256characters := 
  'ThisStringis' +
  'ofLength256' +
  'And ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'CharactersCharactersCharactersCharactersCharactersCharactersCharactersCharacters';
Run Code Online (Sandbox Code Playgroud)


pau*_*sm4 5

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

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

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

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

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

这篇文章更详细地解释了:

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

  • 这在当代版本的 Delphi 中不再是一个问题,除了两个地方;字符串文字,以及像 string[50] 这样的下标字符串,其中(显然!)限制是 250 或更少,在我提到的情况下,限制是 50。 (2认同)