我正致力于 delphi 7 ,我正在研究字符串,我遇到了这个
对于一个默认长度的字符串,即简单地声明为字符串,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:='';
Label1.Caption:='';
for iCounter:=0 to 2500 do
begin
myExtremlyLongString:=myExtremlyLongString+inttostr(iCounter);
Label1.Caption:=myExtremlyLongString;
end;
Label2.Caption:=inttostr(length(myExtremlyLongString));
end;
,结果是
正如您所看到的, myExtremlyLongString 的长度为 8894 个字符。
为什么delphi没有给出 myExtremlyLongString 的长度超过255的错误?
修改
SetLength(sMyStringOF256characters,300);
但它不起作用。
答案 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在最大长度上也是有效的“无限”。
本文更详细地解释:
答案 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...';
对将来的编辑不利。
专业人士:您可以使用任何长文本。
缺点:文本代码是打开的,任何人都可以在记事本中读取它打开文件等。