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

  1. 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 #

  2. 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 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^