在Delphi中结合字符串和字符

时间:2014-06-30 09:13:39

标签: string delphi char

function leftstr(s:string; n:Integer):string;
var
i:integer;
t:string;
begin
//init var t
t := '';
for i := 0 to n do
begin
//main loop
t := t + s[i];
end;
//return results
Result:=t;
end;

因此,当我运行此函数并使用ShowMessage在i的每个增量中获取t的值时,t始终为空。有人能告诉我这个问题吗?这是使用Delphi XE6编译的

1 个答案:

答案 0 :(得分:5)

问题是字符串使用基于1的索引并且您正在访问越界。你的循环应该是:

for i := 1 to n do

可能会发生的是s[0]指的是字符串的元数据的某些部分(长度或引用计数,我不记得哪个)恰好包含零字节。然后,当字符串传递给ShowMessage时,将其解释为空终止符。

如果您在编译器选项中启用了范围检查功能,编译器将插入可能为您找到错误的代码。这种范围检查功能是一个令人惊讶的被忽视和忽视的功能。


当然,这个功能有点无意义,效率也很低。您可以使用StrUtils单元中的LeftStr。或来自System单元的普通Copy