在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'] ...
或者我想念什么?
但据我所知,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