(28.03.2021 16:40)daemon_n Wrote: Bes, Raistlin, ребята, спасибо, получилось (как ни странно)
Нет, товарищи, так дело не пойдёт. Оставьте Вы этот ужас . Вариант Беса — неопределённое поведение и игра с памятью, которая давно могла быть освобождена. Остальные варианты тоже ужасны. А глянуть, как куча функций в Era Erm Framework принимают строки?
Для очень старых скриптов всегда можно было передать индекс глобальной или ERT z-переменной в функцию.
В Эре 3 строки можно передавать напрямую.
А что делать, если Вы хотите объединить две строки произвольного размера? Локальные строки по 511 байт могут обрезать текст.
Тогда можно создать глобальную временную z-переменную с огромным индексом, которая будет доступна только для чтения и будет уничтожена по выходу из триггера.
Но что делать, если мы хотим вернуть строку из функции? Например, функция будет принимать имя героя и возвращать строку «Dear, [Name], your time is over».
По выходу из функции везде, где применялся синтаксис возврата строки вида P.../?z(...)/.../?s^...^ функция трактует конечные значения x-параметров как индексы z-строк. Сами строки копируются во временное хранилище, а оттуда уже присваиваются указанным при вызове переменным.