Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

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

Re: Problem mit TFileStream und Write Read

  Alt 8. Jul 2008, 19:50
Moin Christian,

nein, wenn Du den Index weglässt, wird der Pointer geschrieben, den die StringVariable enthält, sowie eben alles, was zufällig dahinter im Speicher steht.

Beispiel

Delphi-Quellcode:
// Länge meint hier den Wert, den SizeOf zurückliefern würde
var // Adresse: Länge: Inhalt
  s : string; // 4712 4 Unbekannt
  w : word; // 4716 2 Unbekannt
                // 4718 2 Unbekannt (nicht genutzt, weil, i.d.R. Alignment 4)
  i : integer; // 4720 4 Unbekannt


begin
  s := 'TESTWERT'; // Adresse: 4712 / Länge: 4 Inhalt: $401F0000 (8000 dezimal)
                    // Adresse: 7992 / Länge: 4 Inhalt: $01000000 (Referenzzähler, 1 dezimal)
                    // Adresse: 7996 / Länge: 4 Inhalt: $08000000 (Länge des Strings, 8 dezimal)
                    // damit ein String in C-Funktionen direkt genutzt werden kann, legt
                    // der Compiler automatisch eine binäre 0 als Endekennung dahinter
                    // Adresse: 8000 / Länge: 4 Inhalt: TESTWERT#00
  w := 50; // Adresse: 4716 / Länge: 2 Inhalt: $3200 (50 dezimal)
                    // Adresse: 4718 / Länge: 2 Inhalt: unbekannt
  i := 1000; // Adresse: 4720 / Länge: 4 Inhalt: $E8030000 (1000 dezimal)

// Wenn man jetzt
fs.Write(s,Length(s));
// schreiben würde, würde in der Datei folgendes stehen (Hexadezimal)
// Annahme: Die Variablen würden so im Speicher stehen, wie oben
// angegeben, was aber nicht der Fall sein muss.
// Diese Annahme dient hier nur der Verdeutlichung.
//
// 401F00003200????
// Es werden also die Adresse des Strings, sowie der Wert von w in die Datei geschrieben.
// Der Wert der verbleibenden zwei Bytes ist unbekannt

// Bei
fs.Write(i,SizeOf(i));
// wird E8030000 in der Datei stehen, bei
fs.Write(w,SizeOf(w));
// ist es dann 3200.
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