Så lige at du ville vide TOTAL antal bytes din string fylder. Så skal du lige ligge 1 til resultatet, da der benyttes 1 byte til at gemme længden i. Altså:
stigc >> Rigtigt. Det er begrænsningen i PASCAL. Derfor kan man nu også benytte 0-terminerede stringe. Når man erklærer variablen som STRING er det ikke en 0-termineret string. Så skal man have fat i PChar.
Når du klikker på BtnAssign, tildeles en værdi til Str1, og Str2 sættes til at pege på samme string.
Når du klikker på BtnChange, ændres værdien af Str1 fra Hello til Hallo. For at Str2 nu ikke skal ændre værdi, foretager Delphi en Copy-On-Write, fordi Str2 har en Reference Count, der er større end 1.
Jeg beklager meget hvis mit svar har skabt forvirring. Jeg læste spørgsmålet som, at lolle gerne ville vide, hvor meget en string FYLDER, ikke hvor lang den er.
Det er korrekt, sizeof giver 4 på en String, men ikke på en String[255], f.eks., og det er fordi det er en reference. Jeg kender ingen sikker måde til at vide præcis hvor meget en String reelt fylder, da Delphi selv står for allokeringen.
Til gengæld kan en String i moderne Delphi-er sagtens være længere end 255 tegn, men ikke hvis man skriver String[..et tal..] - der er grænsen netop 255.
erikjacobsen >> Det er rigtigt at der kan arbejdes med sringe der er længere end 255 tegn, men det skal man slå til med et compilerdirektiv, ellers arbejden den som PASCAL gjorde i \"goé gamle dage\", altså max 255 tegn.
pstric >> Jeg er ret sikke på at det er slået fra default. Jeg har først enablet det for nyligt, netop fordi jeg havde behov for strings, der er længere end 255 tegn og jeg havde ikke lyst til at skulle arbejde med PChars.
En Standart String i Delphi fylder Lenght(String)*8 bit, da en Char en = 1 byte, du skal dog være opmærksom på at WideString fydler mere, se delphi/windows hjælpen for nøjagtig størelse. Og Sizeof retunere 4 på en string fordi det er en pointer og ikke fordi den er ref. count.
pstric >> rolig nu. Hvis du bemærkede tillægsspørgsmålet med division, vil du se at manden nok er lidt \"grøn\". Vi er vel allesammen startet på et tidspunkt :o)
Ja, ja, du lagde vel også mærke til de sidste tre tegn (= 3 bytes ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.