Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - array Problem ( dynamisch oder statisch)


delphinia - Mo 12.12.05 08:20
Titel: array Problem ( dynamisch oder statisch)
Hallo

habe vorher dieses gehabt


Delphi-Quelltext
1:
2:
3:
4:
5:
  Sig_Code: array[0..3of Char;
begin
  Sig_code := 'Test'
  FS := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);
  FS.Write(Sig_Code, sizeof(Sig_Code));


Dies war OK und die ausgabe war richtig... nun woollte ich das ganze bissel flexiblaer machen udn dachte mir dieses


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  Sig_Code: array of Char;
code:string
begin
  l := length(Code);
  SetLength(Sig_Code, l);

  if l > 0 then
    for i := 1 to l do
    begin
     Sig_Code[i - 1] := Code[i];
    end;

   
  FS := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);
  FS.Write(Sig_Code, sizeof(Sig_Code));


allerdings ist hier die Ausgabe nur noch müll


opfer.der.genauigkeit - Mo 12.12.05 10:41

Hi,

probier mal bitte statt:

Delphi-Quelltext
1:
  FS.Write(Sig_Code, sizeof(Sig_Code));                    


das hier:


Delphi-Quelltext
1:
  FS.Write(Sig_Code[0], sizeof(Sig_Code));                    


BenBE - Mo 12.12.05 13:44

Das hängt damit zusammen, dass bei dynamischen Arrays eine Variablen-Referenz ohne explizite Index-Angabe auf den Zeiger des ersten Elements verweist.

@opfer.der.genauigkeit: Es müsste hier sogar Length(Sig_Code) * SizeOf(SigCode[0]) heißen, um genau zu sein ...

Er kann aber auch einfach den String so streamen: FS.Write(Code[1], Length(Code)); (Bei verwendung von Ansi-Strings)


opfer.der.genauigkeit - Mo 12.12.05 13:51

user profile iconBenBE hat folgendes geschrieben:

@opfer.der.genauigkeit: Es müsste hier sogar Length(Sig_Code) * SizeOf(SigCode[0]) heißen, um genau zu sein ...


Wieder bin ich ein Opfer geworden. ;)
Den zweiten Parameter hab ich nicht beachtet, aber du hast natürlich recht.

Und um deinen ersten Satz noch zu ergänzen.
Referenzvariablen von dynamischen Arrays sind implizite Zeiger.
Wie du ja sagst, sie zeigen auf das erste Element.