- Код: Выделить всё
program rev;
{$R *.res}
{процедура реверсии строки}
procedure Reverse(var S: String);
var
l, i: word;
{указатели используються для обмена двух символов из левой и правой части строки}
pleft, pright: PChar;
ch: Char;
begin
l:= Length(S);
pleft:= @S[1]; pright:= @S[l];
for i:= 0 to Pred(l div 2)
do begin
ch:= pleft^; {сохряняем символ}
pleft^:= pright^; // краш на этой строке
pright^:= ch;{востанавливаем}
{двигаем к центру строки}
inc(pleft); dec(pright);
end;
end;
var
S: String;
begin
S:= 'lalala';
Writeln(S); Reverse(S); Writeln(S);
Readln;
end.
Версия компилятора 3.0.0, Вин10. Я уже писал подобный код и он на более старых версиях выполнялся корректно, может в новой версии так нельзя делать?