我正在使用** 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);
6条答案
按热度按时间iyr7buue1#
为什么 Delphi 没有给予任何错误,说长度超过了255,对于myxmlyLongString?
你的答案在文本的**Long String(AnsiString)**部分。
在当前版本的 Delphi 中,字符串类型只是AnsiString的别名,
所以string不限于255个字符,但字符串字面量是。这意味着您可以生成长度超过255个字符的字符串,但代码中的字符串值不能超过255个字符。如果你想的话你得把它们分开。
qlvxas9a2#
将其拆分为:
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
jv4diomz4#
不同之处在于,在第一个代码示例中,您将字符串作为代码的一部分-文字字符串。它对允许的字符数有限制。
在第二个代码示例中,我们动态地生成它,而不是将它作为一个大的文字字符串。
Delphi 中的字符串类型(不像最多只能是255的短字符串)可以和你的内存一样大。
m2xkgtsf5#
你可以尝试使用StringBuilder类:
stszievb6#
如果你在 Delphi 中需要很长的字符串,你可以从其他资源加载它,比如一个txt文件或者只是带有任何扩展名的纯文本。我正在使用它,它工作。您可以使用纯文本行号创建“like a”数组表。在 Delphi 代码中,您可以按照@arjen货车der Spek和其他人的说法进行操作。
对我来说,带有var格式文本的文件-
sometext:string= 'txt...'+ 'txt...'+ 'txt...';
对未来的编辑不利。
优点:你可以使用任何长文本。
缺点:文本代码是开放的,任何人都可以阅读它在记事本等打开文件。