【发布时间】:2012-01-07 06:33:00
【问题描述】:
我正在研究 delphi 7,我正在研究字符串,我遇到了这个
对于默认长度的字符串,即简单声明为字符串,最大大小始终为 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);
但它不起作用。
【问题讨论】:
-
也许您只是在阅读错误的文档。顺便说一句,它真的不清楚你所说的“动态分配”是什么意思,而不是......什么?
-
@user539484 : 在循环运行期间的含义可能是 strVal:=mystring,就像您分配给字符串变量的循环值
-
啊,那么“动态地”从头开始,它是关于赋值与声明。您在上面引用的是关于声明,更具体地说 - 关于字符 literals 的编译器限制。它仅通过历史手段连接到 Turbo Pascal 弦。
-
我猜他们并没有消除这个限制,只是因为没有实际理由让字符串 literal 超过 70 个字符......在内部(对于编译器)这样的文字是等价的到
array [0..N] of Char。希望现在更清楚。
标签: string delphi size delphi-7