substr() и конец строки

Опубликовано в Ошибки QPILE

Интерпретатор не проверяет длину строки при исполнении функции substr()

А = substr("01234",10,5)

Ошибка на самом деле отнюдь не безобидная. Кроме неправильной работы портфеля в какой-то момент мы можем получить ошибку адресации и аварийное закрытие терминала QUIK.

По ощущениям, исправлять эту ошибку компания ARQA Technologies не собирается. Лечится предварительной проверкой длины строки функцией len().

Комментарии   

# Андрей_ 30.03.2012 23:48
Интерпретатор не только не проверяет длину строки при исполнении функции SUBSTR(), но и не проверяет на допустимость значения аргумент(а,ов), передаваемые в эту функцию:
PORTFOLIO_EX SUBSTR_error;
DESCRIPTION SUBSTR_error;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM
nachalo=-2
dlina=4
itog=SUBSTR("stroka",nachalo,dlina)
WRITELN("c:text.txt", itog)
OUTPUT=CREATE_MAP()
OUTPUT=SET_VALUE(OUTPUT,"itog",itog)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT)
END_PROGRAM

PARAMETER itog;
PARAMETER_TITLE itog;
PARAMETER_DESCRIPTION itog;
PARAMETER_TYPE string(10);
END
END_PORTFOLIO_EX

Портфель работает :eek: , ошибки не выдается несмотря на то, что nachalo меньше 0 является недопустимым значением. В файл c:text.txt выводятся 4 символа st (их 16-ричные коды 08 02 73 74).

Недостаточно прав для комментирования