Pascal a řetězce
December 7, 2006 on 10:22 pm | In Programing |V referátu o rozdílech mezi pascalem a C jsem (jsme - referát se mnou připravoval i Mira) se zmínil o rozdílech v řetězcích. V C je řetězec pole znaků. Aby jednotlivé fce, které s řetězci pracují nemuseli znát pokaždé i délku, tak je dáno, že řetězec je zakončen takzvaným nulovým bytem (známá escape sekvence ‘\0′). V době psaní a přednášení referátu jsem neměl tušení jak s tímto nakládá pascal. I když malé tušení jsem měl - o možnosti spojit dva řetězce vložením znaku + mezi ně jsem věděl. Právě díky tomu mi bylo jasné, že pascal s tím musí operovat hodně, hodně pofidérně.
No a dneska už konečně i já vím jak tento mnou zatracovaný jazyk s řetězci pracuje. První byte neobsahuje znak, ale používá se pro uložení délky řetězce. No a pak následuje prvním bytem daný počet znaků. Pro příklad, string “jarcec” má velikost 7 bytů, kdy v prvním je uloženo číslo 6.
Na první pohled to může vypadat docela krásně. Třeba určit délku řetězce není moc náročná operace - zatímco v C musíte projít cely řetězec až na konec a teprve poté můžete zjistit jak je dlouhý. Ovšem vypadá to krásně opravdu pouze na první pohled. Je-li totiž délka uložená v prvním bytu, tak může mít maximalní velikost 255. Větší číslo do jednoho bytu hold neuložim ani kdyby Karásek začal do školy chodit v čas (pozn. autora - toto přirovnaní poukazuje na naprostou nepravděpodobnost, obdobně jako “kdybych se na hlavu postavil”, leč je ještě méně pravděpodobnější)… Z čehož tedy logicky vyplývá, že v pascalu je řetězec shora omezen na maximální velikost 255 znaků.
Což mi tedy příjde docela nepohodlné, ale tak dejme tomu. Přeci jen si tohoto jazyka “užiji” již jen půl roku a pak mu dám definitivní sbohem stejně jako mé “milované” střední škole…
2 Comments »
RSS feed for comments on this post. TrackBack URI
Leave a comment
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^
pokud znáte freepascal 2.0.2 tak tam je to s retezci trochu jinak:
dá se k nim přistupovat jako k poli znaků str[5]
a s tim delkovym omezenim je ve freepascalu zaveden typ Pchar = ^char (ukazatel na řadu znaků) tedy jako v C - ve fpc je ale funkce na prime zjisteni delky length(s:Pchar):longint
k pchar-um se da taky pristupovta jako k poli znaku: pchr[1705] - prakticky až do 2 GB dat
Comment by jan16 — 2007-03-29 #
Asi pred tydnem jsem FreePascal zkousel a tak nejak premyslim nad tim proc nase skola dava prednost Turbo Pascalu (a to jeste par let stare verzi)…
Comment by jarcec — 2007-03-29 #