Главная страница
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.024 c
1-1109332679
Shurik_
2005-02-25 14:57
2005.03.13
OpenDialog1


6-1104808568
Трям
2005-01-04 06:16
2005.03.13
Железо удалённого компьютера


6-1105038683
Ancot
2005-01-06 22:11
2005.03.13
Обнова через I-Net


1-1109548060
Flash_chnu
2005-02-28 02:47
2005.03.13
Динамическая компонента TImage


14-1109100378
Anton_K
2005-02-22 22:26
2005.03.13
Про ламёров