Galkov писал(а):
Это хитрая функция, которая гарантирует НЕ НОЛЬ.То-то она нагарантировала, что валится при пустой строке. Вот, пожалуйста, нажми кнопку и увидишь, если нам не веришь
Add(MainForm,14210893,182,140)
{
}
Add(InlineCode,4094146,245,196)
{
WorkPoints=#5:Lower|
EventPoints=#6:Result|
DataPoints=#3:Str|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|11: Result,|19: Str: THI_Event;|51: procedure Lower(var _Data: TData; Index: word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.Lower;|3:var|13: st: string;|5:begin|31: st := ReadString(_Data, Str);|19: UniqueString(st);|47: _hi_onEvent(Result, CharLower(PChar(st))); |4:end;|0:|4:end.|
link(Result,12047234:doText,[])
link(Str,7462654:Text,[])
}
Add(Edit,7462654,245,140)
{
Left=10
Top=10
Width=220
Text=""
}
Add(Edit,12047234,308,196)
{
Left=10
Top=35
Width=220
Text=""
}
Add(Button,9286840,182,196)
{
Left=90
Top=65
TabOrder=-1
link(onClick,4094146:Lower,[])
}
и сравни вот с этим кодом
Add(MainForm,2953706,77,119)
{
}
Add(InlineCode,4094146,140,175)
{
WorkPoints=#5:Lower|
EventPoints=#6:Result|
DataPoints=#3:Str|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|11: Result,|19: Str: THI_Event;|51: procedure Lower(var _Data: TData; Index: word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.Lower;|3:var|13: st: string;|5:begin|31: st := ReadString(_Data, Str);|19: UniqueString(st);|44: _hi_onEvent(Result, CharLower(@st[1])); |4:end;|0:|4:end.|
link(Str,7462654:Text,[])
link(Result,12047234:doText,[])
}
Add(Edit,7462654,140,119)
{
Left=10
Top=10
Width=220
Text=""
}
Add(Edit,12047234,203,175)
{
Left=10
Top=35
Width=220
Text=""
}
Add(Button,9286840,77,175)
{
Left=90
Top=65
TabOrder=-1
link(onClick,4094146:Lower,[])
}
А вот теперь объясни -- почему при пустой строке PChar(st) валится, а @st[1] не валится?