AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

size of string?

Ein Thema von SirThornberry · begonnen am 17. Nov 2003 · letzter Beitrag vom 18. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: size of string?

  Alt 17. Nov 2003, 23:16
Moin Chewie,

Zitat von Chewie:
Eine Variable vom Typ String stellt einen Zeiger auf eine String-Struktur dar, die so aussieht, dass zunächst ein 4 Byte großer Referenzzähler, gefolgt von einer 4 Byte großen Längenangabe gespeichert wird.
Fast

Der Zeiger zeigt auf das erste Datenbyte, wenn die Länge > 0 ist. Davor, also auf Zeiger-4 beginnt der Längenzähler, auf Zeiger-8 der Referenzzähler.

Delphi-Quellcode:
var
  s : string;

begin
  s := StringOfChar(#32,800);
  ShowMessage(IntToStr(PDWORD(PChar(s)-4)^)+#13#10+IntToStr(PDWORD(PChar(s)-8)^));
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

Re: size of string?

  Alt 17. Nov 2003, 23:27
stimmt den Referenzzähler hab ich ganz vergessen.
$2B or not $2B
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#13

Re: size of string?

  Alt 18. Nov 2003, 01:58
Zitat von Christian Seehase:
Der Zeiger zeigt auf das erste Datenbyte, wenn die Länge > 0 ist. Davor, also auf Zeiger-4 beginnt der Längenzähler, auf Zeiger-8 der Referenzzähler.
Mit PChar() mag das stimmen, aber versuchst du das selbe mal mit @AStr wirst du feststellen, das das nicht zum selben ergebnis führt wie @AStr[1]
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#14

Re: size of string?

  Alt 18. Nov 2003, 09:03
Zitat von SirThornberry:
Was passiert dann aber wenn ich dispose(Zeigervariable) mache, wird dann der speicher wo der String hinzeigt mit freigegeben?
Diese Aufgabe wird von Dispose übernommen.
Die Prozeduren Initialize und Finalize brauchen nur in den seltenste Fällen verwendet werden. Der Gebrauch von New und Dispose zählt nicht hierzu (wie ein Blick in dessen Implementierung oder die OH verrät )
gruß, choose
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: size of string?

  Alt 18. Nov 2003, 14:50
Finalize wird aber laut OH bei dyn. Arrays benötigt (sofern keine Zuweisung an nil stattfindet). Also wenn das dyn. Array sich in einem dynamisch erzeugten Record befindet.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: size of string?

  Alt 18. Nov 2003, 20:11
Moin scp,

Zitat von scp:
Mit PChar() mag das stimmen, aber versuchst du das selbe mal mit @AStr wirst du feststellen, das das nicht zum selben ergebnis führt wie @AStr[1]
Logisch, weil @AStr die Adresse der Variablen angibt, die die Adresses des Strings enthält, wohingegen @AStr[1] das gleiche ergibt wie @AStr^[0] (wenn man es so schreiben könnte), also die Dereferenzierung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz