OberonCore
https://forum.oberoncore.ru/

отличается ли := для строк от COPY?
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6618
Страница 1 из 1

Автор:  budden [ Суббота, 23 Май, 2020 09:32 ]
Заголовок сообщения:  отличается ли := для строк от COPY?

По-моему, одно и то же по смыслу. Есть ли отличия?

Автор:  Sergej Durmanov [ Суббота, 23 Май, 2020 14:25 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

COPY копирует данные строки любого размера, обрезая лишнее, если необходимо. Оператор := требует, чтобы массивы были совместимы

Автор:  adimetrius [ Суббота, 23 Май, 2020 18:08 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

ЕСЛИ вопрос про КП, то:
Если "для строк", а не для массивов, то := подразумевает нуль-терминальные строки, и совершает АВОСТ, если нуля в массиве нет. a := b$
ИНАЧЕ
КОНЕЦ

Автор:  budden [ Воскресенье, 24 Май, 2020 11:59 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Вопрос был про A2, но есть вероятность, что одно и то же. Спасибо за ответы, учту в дальнейшей работе.

Автор:  Oleg N. Cher [ Понедельник, 25 Май, 2020 02:03 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Sergej Durmanov писал(а):
COPY копирует данные строки любого размера, обрезая лишнее, если необходимо. Оператор := требует, чтобы массивы были совместимы
Не совсем так. Можно присваивать между разного размера массивами (в операции a := b$) и копировать строку в массив, но чтобы в массиве-приёмнике места под копируемую строку вместе с 0X гарантированно хватило. Если строка не копируется целиком, будет трап.

А COPY по-тихому обрезает, что может привести к трудно находимым логическим ошибкам. С чем я уже столкнулся. Это действительно неприятно понижает надёжность, когда ждёшь от программы такой логики, что строка скопируется целиком, а вместо этого её содержимое обрезается и искажается, притом без предупреждений.

Я в Ofront+ для КП и O3 перенёс COPY в SYSTEM. В O и O2 осталось для совместимости.

P.S. А, или в AO нет операции a := b$ ? Тогда упс.

Автор:  Sergej Durmanov [ Понедельник, 25 Май, 2020 15:08 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Oleg N. Cher писал(а):
Не совсем так.
речь об а2

Автор:  Oleg N. Cher [ Среда, 27 Май, 2020 03:42 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

А как в AO реализуется безопасное (без усечения) копирование строк? Библиотечным способом?

Автор:  Sergej Durmanov [ Среда, 27 Май, 2020 06:19 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Оператор := требует, чтобы типы массивов символов были совместимы по присваиванию. По-сути это и есть присваивание массивов, и при этом ничего не обрезается и не добавляется.
COPY сейчас копирует строку целиком, обрезая лишнее, если нужно, и вставляя 0X в конец массива(так сделано из соображений совместимости со старым компилятором).

Автор:  budden [ Среда, 27 Май, 2020 11:27 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

А смотрит ли вообще := на символ с кодом 0? Т.е. будет ли копировать за пределами строки?

Автор:  Sergej Durmanov [ Среда, 27 Май, 2020 11:46 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Это присваивание массива. Копируется весь массив и оператору нет никакого дела до 0X

Автор:  Sergej Durmanov [ Среда, 27 Май, 2020 11:56 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Можно использовать процедуры модуля Strings. Append, Copy, Move для получения нужного эффекта

Автор:  budden [ Среда, 27 Май, 2020 14:46 ]
Заголовок сообщения:  Re: отличается ли := для строк от COPY?

Спасибо! Тогда уж, чтоб два раза не вставать, а # для строк как работает? Я расширил длину имени в стиле и всё перестало раскрашиваться. Не понимаю, почему так. При этом в самом раскрасчике стиль по имени успешно находится, проблема, видимо, где-то на границе с TextView, хотя если честно, то вообще не понимаю.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/