Главная страница
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.037 c
14-1108630193
КаПиБаРа
2005-02-17 11:49
2005.03.13
Клиентопользователям! Просба зайти обязательно.


3-1108102236
O.O
2005-02-11 09:10
2005.03.13
Принудительная запись кэш BDE на диск


14-1108463737
WWTLF
2005-02-15 13:35
2005.03.13
Лаги на этом сайте!


3-1108037879
Denmin
2005-02-10 15:17
2005.03.13
Можно ли в таблице поставить фильтр?


14-1109041831
ЮЮ
2005-02-22 06:10
2005.03.13
Всех мужчин с наступающим !!!