Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Тестирование кода   Найти похожие ветки 

 
}|{yk ©   (2005-02-22 19:08) [0]

Вот, наступил на грабли. Взял чужой код и неоттестировал до конца.
function TStrCoding.StrPayReason(s: string; Code: string): string;
var
 i, j1, j2: integer;
 res, cl, cr: string;
begin
   j1 := 0;
   j2 := 0;
   cl := FirstDelimSymbol;
   cr := LastDelimSymbol;
   for i := Length(s) downto 0 do
   begin
     if (s[i] = cr) and (j2 = 0) then
       j2 := i;
     if (s[i] = cl) and (j1 = 0) then
       j1 := i + 1;
   end;
   res := Trim(Copy(s, j1, j2 - j1)); //code
   Result := s;
   if Length(res) = CountSymbol then
     Result := StringReplace(s, res, FlirtFrom(res, Code), []);
end;

ну и получил AV.
Вопрос но почему Delphi выполняет код в цикле, даже если изначально Length(s)=0?


 
wicked ©   (2005-02-22 19:14) [1]

патаму-что.... в паскале, АФАИР, границы цикла проверяются на <= для to и >= для downto, то есть инклюзивно....
посему, заголовок цикла for должен был выглядеть так:
for i := Length(s) downto 1 do


 
wicked ©   (2005-02-22 19:16) [2]

это то, что сразу бросилось в глаза...
ну и по мелочевке, правила хорошего тона (для меня) -
function TStrCoding.StrPayReason(const s: string; const Code: string): string;


 
Юрий Зотов ©   (2005-02-22 20:35) [3]

> }|{yk ©   (22.02.05 19:08)  

Цикл выполняется от 0 до 0. То есть, один раз, как и положено. А поскольку S[0] не существует (точнее, информация по этому адресу существует, но это уже не символ строки), то возможны чудеса.



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.052 c
4-1107204385
rks
2005-01-31 23:46
2005.03.13
Программирование USB


14-1108634829
uny
2005-02-17 13:07
2005.03.13
win98 долго входит в сеть при dialup, причём она сразу в сети


4-1107172813
BaDeVlad
2005-01-31 15:00
2005.03.13
Как вывести Unicode-строку?


6-1105213067
Alexander Makhanev
2005-01-08 22:37
2005.03.13
Как узнать, находится ли комп в домене?


3-1108033366
Юрец
2005-02-10 14:02
2005.03.13
Отображение содержимого Грида или помогите разобраться