Строка с нулями - PullRequest
       18

Строка с нулями

9 голосов
/ 30 апреля 2019

в 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 Ответ

10 голосов
/ 30 апреля 2019

Но насколько я знаю, s.Chars [xx] всегда будет строкой, начинающейся с нуля

Да, подпрограммы TStringHelper написаны для работы со строками как нольна основе, независимо от настроек компилятора ({$ ZEROBASEDSTRINGS ON / OFF}).См. SysUtils.TStringHelper.Chars .

, чтобы сделать IntPart.Chars [length (IntPart)] в ['1', '3', '5', '7', '9'] всегда будет выходить за границы?

Это правильно.Это должно было быть Length(IntPart)-1.

Сообщается как: SysUtils.InternalTextToCurrency обращается к строке за пределами


Кроме того, когдапроверка диапазона включена, IntPart.Chars[length(IntPart)] должен был вызвать исключение.Это тоже ошибка (в TStringHelpers.Chars).

Сообщается как: TStringHelper.Chars не выдает ошибку диапазона, когда индекс выходит за пределы

...