Доступ к элементу строки (извиняюсь если было)

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
borispr
незнакомец
Сообщения: 3
Зарегистрирован: 16.12.2008 13:39:31

Доступ к элементу строки (извиняюсь если было)

Сообщение borispr »

Не могу сформулировать это для поиска поэтому возможно спрошу не в первый раз

В Дельфи
S := '123';
S[1] = '1'

Во FreePascal 2.2.2
S := '123';
S[1] = '2'

Это лыжи не едут или я дурак? Может опции надо какие-то выставить, чтобы была совместимость с Дельфи?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А S у Вас какого типа? У меня показывает именно так как надо: S[1] = '1'.
borispr
незнакомец
Сообщения: 3
Зарегистрирован: 16.12.2008 13:39:31

Сообщение borispr »

Тип просто string

Нарыл на сайте текст
Изменения типа string в режиме Delphi. В версии 2.2.0 по умолчанию используется директива компилятора {$h+} вместо {$h-}


У меня начале юнита стояло {$mode objfpc}{$H+}
Как я понял H+ включает длинные строки
Убрал опцию, S[1] стало равно '1', но при этом строки стали короткими.
gyunter
новенький
Сообщения: 12
Зарегистрирован: 05.12.2008 00:02:43
Откуда: Heard & McDonald's Islands

Сообщение gyunter »

Код: Выделить всё

var
s:string;
begin
s:='123';
writeln('S[1]=',S[1])
end.


Так выводит S[1]=1
borispr
незнакомец
Сообщения: 3
Зарегистрирован: 16.12.2008 13:39:31

Сообщение borispr »

Действительно, в самой программе оказалось все правильно! Косяк оказался в другом - я S[1] смотрел через Evaluate в Lazarus
С опцией H+
Expression: S
Result: 0x80624bc '123'
Expression: S[1]
Result: 50 '2'

Без опции
Expression: S
Result: '123'
Expression: S[1]
Result: 49 '1'
Ответить