OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:22

Часовой пояс: UTC + 3 часа




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

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
По-моему, одно и то же по смыслу. Есть ли отличия?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Суббота, 23 Май, 2020 14:25 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
COPY копирует данные строки любого размера, обрезая лишнее, если необходимо. Оператор := требует, чтобы массивы были совместимы


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Суббота, 23 Май, 2020 18:08 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Воскресенье, 24 Май, 2020 11:59 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Вопрос был про A2, но есть вероятность, что одно и то же. Спасибо за ответы, учту в дальнейшей работе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Понедельник, 25 Май, 2020 02:03 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Sergej Durmanov писал(а):
COPY копирует данные строки любого размера, обрезая лишнее, если необходимо. Оператор := требует, чтобы массивы были совместимы
Не совсем так. Можно присваивать между разного размера массивами (в операции a := b$) и копировать строку в массив, но чтобы в массиве-приёмнике места под копируемую строку вместе с 0X гарантированно хватило. Если строка не копируется целиком, будет трап.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Понедельник, 25 Май, 2020 15:08 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Oleg N. Cher писал(а):
Не совсем так.
речь об а2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 03:42 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
А как в AO реализуется безопасное (без усечения) копирование строк? Библиотечным способом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 06:19 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 11:27 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
А смотрит ли вообще := на символ с кодом 0? Т.е. будет ли копировать за пределами строки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 11:46 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Это присваивание массива. Копируется весь массив и оператору нет никакого дела до 0X


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 11:56 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Можно использовать процедуры модуля Strings. Append, Copy, Move для получения нужного эффекта


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: отличается ли := для строк от COPY?
СообщениеДобавлено: Среда, 27 Май, 2020 14:46 

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB