OberonCore
https://forum.oberoncore.ru/

Копирование строк
https://forum.oberoncore.ru/viewtopic.php?f=29&t=5663
Страница 1 из 1

Автор:  kekc_leader [ Воскресенье, 10 Апрель, 2016 00:58 ]
Заголовок сообщения:  Копирование строк

В Обероне-2 можно было написать так:
Код:
VAR p: POINTER TO ARRAY OF CHAR;
  s: ARRAY 100 OF CHAR;
BEGIN
  ...
  COPY(p^, s)

Блэкбокс ругается, что COPY - это устаревшая фишка Оберона, но написать s := p^; он тоже не даёт. Говорит: «Несовместимые типы».
В итоге я написал цикл WHILE, который всё прекрасно перекопировал. А как сделать правильно?
Код:
PROCEDURE GetError* (VAR s: ARRAY OF SHORTCHAR);
VAR p: POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR;
BEGIN
  p := ...........;
  i := 0; WHILE (i < LEN(s)) & (p[i] # 0X) DO s[i] := p[i]; INC(i) END

Автор:  Alexander Shiryaev [ Воскресенье, 10 Апрель, 2016 01:01 ]
Заголовок сообщения:  Re: Копирование строк

Что нужно сделать?

Автор:  Роман М. [ Воскресенье, 10 Апрель, 2016 01:30 ]
Заголовок сообщения:  Re: Копирование строк

Читаем справку
Help -> What's New писал(а):
String concatenation
The + operator now allows to concatenate strings. The target variable must be of sufficient length to hold the resulting string.

Elimination of COPY
The auxiliary procedure COPY is not necessary anymore, since the $ operator makes it superfluous. For example,

COPY(a, varpar) is replaced by varpar := a$

Автор:  kekc_leader [ Воскресенье, 10 Апрель, 2016 02:00 ]
Заголовок сообщения:  Re: Копирование строк

Надо из POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR скопировать символы в ARRAY OF SHORTCHAR (в открытый массив).
Так заработало:
Код:
s := p$
(s - ARRAY OF SHORTCHAR;   p - POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR)
Даже не пришлось ставить крышку (^).
Спасибо за помощь.

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