基于零的字符串

问题描述 投票:9回答:1

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'] ...

或者我想念什么?

delphi delphi-10.3-rio
1个回答
10
投票

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

是的,无论编译器设置如何({$ ZEROBASEDSTRINGS ON / OFF}),TStringHelper例程都被编写为基于零的字符串操作。见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

© www.soinside.com 2019 - 2024. All rights reserved.