从零开始的字符串

时间:2019-04-30 11:34:09

标签: delphi delphi-10.3-rio

system.sysutils.pas中,在里约热内卢,他们添加了以下说明:

var intPart: String;

... IntPart.Chars[length(IntPart)] in ['1','3','5','7','9'] ...

但是据我所知, s.Chars [xx] 将始终为从零开始的字符串,因此,IntPart.Chars[length(IntPart)] in ['1','3','5','7','9']的执行将始终为越界

绝对不能写

... IntPart.Chars[length(IntPart)-1] in ['1','3','5','7','9'] ...

或者我想念什么?

1 个答案:

答案 0 :(得分:10)

  

但是据我所知,s.Chars [xx]将始终是从零开始的字符串

是的,TStringHelper例程被编写为基于零的字符串操作,而不考虑编译器设置({$ ZEROBASEDSTRINGS ON / OFF})。参见SysUtils.TStringHelper.Chars

  

如此在['1','3','5','7','9']中执行IntPart.Chars [length(IntPart)]总是会超出边界吗?

是正确的。应该是Length(IntPart)-1

报告为: SysUtils.InternalTextToCurrency accesses a string out of bounds


此外,启用范围检查后,IntPart.Chars[length(IntPart)]应该引发了异常。这也是错误(在TStringHelpers.Chars中)。

报告为: TStringHelper.Chars does not issue a range error when index is out of bounds