Delphi 的“字符串”字面值怎么能超过255个字符?

gzszwxb4  于 2023-10-18  发布在  其他
关注(0)|答案(6)|浏览(269)

我正在使用** Delphi 7**和字符串,以及I came across this
对于一个默认长度的字符串,也就是简单地声明为string,max size总是255。ShortString永远不允许增长到超过255个字符。
有一次我不得不在我的 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 := '';
  for iCounter := 0 to 2500 do
  begin
    myExtremlyLongString := myExtremlyLongString + IntToStr(iCounter);
  end;
  Label1.Caption := myExtremlyLongString;
  Label2.Caption := IntToStr(Length(myExtremlyLongString));
end;

.结果是:

正如你所看到的,myExtremlyLongString的长度是8894个字符。为什么 Delphi 没有给予任何错误,说myExtremlyLongString的长度超过255?我也用了这个,但它不工作:

SetLength(sMyStringOF256characters, 300);
iyr7buue

iyr7buue1#

为什么 Delphi 没有给予任何错误,说长度超过了255,对于myxmlyLongString?
你的答案在文本的**Long String(AnsiString)**部分。
在当前版本的 Delphi 中,字符串类型只是AnsiString的别名,
所以string不限于255个字符,但字符串字面量是。这意味着您可以生成长度超过255个字符的字符串,但代码中的字符串值不能超过255个字符。如果你想的话你得把它们分开。

sMyString:='ThisStringisofLength255'+'ThisStringisofLength255';
qlvxas9a

qlvxas9a2#

将其拆分为:

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

ndh0cuux3#

在旧的DOS/Turbo Pascal时代,“字符串”确实被限制在255个字符以内。很大程度上是因为第一个字节包含了字符串的长度,而一个字节只能有0到255之间的值。
这在当代版本的 Delphi 中不再是问题。
“ShortString”是旧DOS/Pascal字符串类型的类型。
“LongString”作为默认字符串类型已经有很长一段时间了(包括我目前用于大多数生产工作的Borland Delphi 2006)。LongStrings(又名“AnsiStrings”)保存8位字符,并且仅受可用内存的限制。
最近的 Delphi 版本( Delphi 2009及更高版本,包括新的 Delphi XE 2)现在都默认为多字节Unicode“WideString”字符串。WideString和AnsiString一样,在最大长度上也是有效的“无限”。
这篇文章更详细地解释:
http://delphi.about.com/od/beginners/l/aa071800a.htm

jv4diomz

jv4diomz4#

不同之处在于,在第一个代码示例中,您将字符串作为代码的一部分-文字字符串。它对允许的字符数有限制。
在第二个代码示例中,我们动态地生成它,而不是将它作为一个大的文字字符串。
Delphi 中的字符串类型(不像最多只能是255的短字符串)可以和你的内存一样大。

m2xkgtsf

m2xkgtsf5#

你可以尝试使用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;
stszievb

stszievb6#

如果你在 Delphi 中需要很长的字符串,你可以从其他资源加载它,比如一个txt文件或者只是带有任何扩展名的纯文本。我正在使用它,它工作。您可以使用纯文本行号创建“like a”数组表。在 Delphi 代码中,您可以按照@arjen货车der Spek和其他人的说法进行操作。
对我来说,带有var格式文本的文件-
sometext:string= 'txt...'+ 'txt...'+ 'txt...';
对未来的编辑不利。
优点:你可以使用任何长文本。
缺点:文本代码是开放的,任何人都可以阅读它在记事本等打开文件。

相关问题