Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - popis struktury typu string...

Mam taku nezvyklu otazku... existuje niekde podrobny popis struktury typu string? A dalsia otazka... uchovava si niekde typ string dlzku retazca? To ze je nulou ukonceny, to som si vypisal... ak som zacal robit vypis o 4 bajty pred zaciatkom retazca v pamati, tak mi zobrazilo dlzku retazca... da sa to povazovat naozaj za dlzku retazca?

Předmět Autor Datum
Tiež to vypísalo (tú dĺžku) aj pri PChar, len o 5 byteov pred, čiže nie 4. A to sa mi zdá divné, leb…
msx. 22.02.2006 00:06
msx.
Struktura Stringu: pp ll s n pp - 2 byte počítadlo výskytů pro test platnosti. ll - 2 byte délka str…
Rce 22.02.2006 03:52
Rce
AnsiString může být přece delší než 64kB. Není to spíš takhle? -12 Longint with maximum string siz…
JM 22.02.2006 09:48
JM
S tou nulovou pozici to tak presne neni, v prvni bajt je stale obsazen velikosti (kompatibilita s Sh…
Jan Fiala 22.02.2006 10:19
Jan Fiala
Aby som to este upresnil: po zadani retazca "ahoj" som si dal vypisat obsah pamate typu string, s ty…
Intex 22.02.2006 11:20
Intex
To znamena, ze je to tak ako pise JM. BTW. s takymi vecami by si v programe podla mna pracovat nema…
MM.. 22.02.2006 11:56
MM..
Mňa to zaujalo kvôli tomu, že ak niekto bude chcieť uložiť fyzicky pamäť do súboru, tak ho SizeOf()…
msx. 22.02.2006 13:21
msx.
Ukladat fyzicky pamat s objektami tried :!::?: do suboru namiesto nejakej rozumnej struktury suboru…
MM.. 22.02.2006 13:25
MM..
To v Pascale. Jaj tak preto to nesedelo.:-D:-[
msx. 22.02.2006 13:27
msx.
S tymto urcite nepracujem, bol to iba akysi test. Moze to zavisiet od verzie prekladaca, alebo od je…
Intex 22.02.2006 13:43
Intex
Ja neviem kde je ten "String" definovany, ale v buducej verzii moze byt trebars ta velkost 64bitova,…
MM.. 22.02.2006 13:54
MM..
Vypis pamate tejto dynamickej premennej bol len akymsi testom pre mna a ma iba informativny charakte…
Intex 22.02.2006 13:59
Intex
Ok, v pohode, ja som len na to chcel upozornit ;-) Samozrejme skumaniu a testovaniu sa ziadne medze… poslední
MM.. 22.02.2006 14:02
MM..

Tiež to vypísalo (tú dĺžku) aj pri PChar, len o 5 byteov pred, čiže nie 4. A to sa mi zdá divné, lebo PChar predsa dĺžku neuchováva a ak je v String aj dĺžka, prečo potom SizeOf() hlási nepravdivú hodnotu (nezaráta 4 byte s dĺžkou reťazca (myslené pri String)?

Pred tým ako to dal Intex sem, sme to totiž riešili spolu cez ICQ.

Aby som to este upresnil: po zadani retazca "ahoj" som si dal vypisat obsah pamate typu string, s tym, ze vypis zacal o 4 bajty skor + este 1 bajt pridany na koniec... a vysledok: 04 00 00 00 61 68 6F 6A 00.

To znamena, ze je to tak ako pise JM.

BTW. s takymi vecami by si v programe podla mna pracovat nemal (pouzi memberov danej triedy, alebo prislusne funkcie prekladaca, edit: alebo strukturu definovanu niekde v include subore prekladaca apod. - potom ta nezaujimaju absolutne offsety), ptz. take veci mozu (netvrdim ze musia) zavisiet od verzie prekladaca a dokonca aj od jeho nastaveni, to moze potom jeden kukat ze co ten program stvara ak niekto nieco zmeni v nastaveniach apod.

Mňa to zaujalo kvôli tomu, že ak niekto bude chcieť uložiť fyzicky pamäť do súboru, tak ho SizeOf() oklame a môže v najhoršom prípade zrútiť program pri spätnomn načitávaní. Ale tak ukladať pamäť asi hocikto nechce. Ide o to, že keď ukladám niečo do súboru, zvykol som použiť SizeOf(), ale ako vidím, tak s tým musím opatrne.

Ja neviem kde je ten "String" definovany, ale v buducej verzii moze byt trebars ta velkost 64bitova, alebo (teoreticky) ju mozu ovplyvnit nastavenia prekladaca napr. tykajuce sa single-byte / multi-byte (t.j. unicode) stringov apod.
Pisem len vseobecne, a teoreticky, netvrdim ze sa niekedy zmeni zrovna tato struktura, ale programy sa nepisu stylom preskumam si to vypisom pamati, ale pouzijem prislusne metody/funkcie (ktore ak sa ta struktura niekedy zmeni tak sa zmenia tiez) alebo ak prekladac ma niekde tu strukturu definovanu napr. nieco ako _string_struc a potom pouzit _string_struc.length, apod.
(V C/C++ su take veci bezne v *.h suboroch, aj s patricnymi #ifdef zavisiacimi od nastaveni prekladaca).

Vypis pamate tejto dynamickej premennej bol len akymsi testom pre mna a ma iba informativny charakter. Nikde v ziadnom programe to aj tak nevyuzijem. Hovorim, bol to iba test, nic viac. Len ma zaujimalo, ci si tento typ uchovava dlzku svojho retazca...

Zpět do poradny Odpovědět na původní otázku Nahoru