Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.031 c
4-1106922134
JaDS
2005-01-28 17:22
2005.03.13
деректива message


14-1109104216
Profi
2005-02-22 23:30
2005.03.13
Посвящается DOOM e


14-1109150896
peypivo
2005-02-23 12:28
2005.03.13
кто знает когда призыв начинается?


8-1101130602
Axer
2004-11-22 16:36
2005.03.13
Ещё вопросик по BASS.DLL


14-1108717649
kai
2005-02-18 12:07
2005.03.13
beeline+gprs+icq+вечером=не коннектится




   Наверх