在system.sysutils.pas
,在里约,他们添加了这样的指令:
var intPart: String;
... IntPart.Chars[length(IntPart)] in ['1','3','5','7','9'] ...
但据我所知,s.Charsxx总是以零为基础的字符串,所以做IntPart.Chars[length(IntPart)] in ['1','3','5','7','9']
总是会离开边界?
它不能被写成
... IntPart.Chars[length(IntPart)-1] in ['1','3','5','7','9'] ...
还是我错过了什么?
发布于 2019-04-30 14:28:28
但据我所知,s.Charsxx将始终是基于零的字符串。
是的,不管编译器设置({ TStringHelper
ON/OFF}),TStringHelper
例程都是以零为基础在字符串上操作的。见SysUtils.TStringHelper.Chars。
那么,在'1','3','5','7','9‘中做IntPart.Charslength(IntPart)总是会超出边界吗?
这是正确的。应该是Length(IntPart)-1
。
报道为: SysUtils.InternalTextToCurrency访问超出界限的字符串
更新:修复在德尔菲10.3.3里约。
此外,当范围检查打开时,IntPart.Chars[length(IntPart)]
应该会引发异常。这也是bug (在TStringHelpers.Chars
中)。
https://stackoverflow.com/questions/55920026
复制相似问题