Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an? (https://www.delphipraxis.net/184877-warum-sieht-delphi-einen-dyn-array-char-nicht-als-zeichenkette.html)

Popov 27. Apr 2015 16:47

Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Also das erste Beispiel mit statischem Array of Char klappt. Ich kann es im Grunde hier und da fast wie ein String nutzen. Warum sperrt sich Delphi aber bei einem dynamischen Array of Char?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  Tx = array[0..3] of Char;
var
  i: Integer;
  x: Tx;
begin
  for i := Low(x) to High(x) do
    x[i] := Chr(65 + i);

  ShowMessage(x);
end;

procedure TForm1.Button2Click(Sender: TObject);
type
  Tx = array of Char;
var
  i: Integer;
  x: Tx;
begin
  SetLength(x, 4);
  for i := Low(x) to High(x) do
    x[i] := Chr(65 + i);

  ShowMessage(x); //geht nicht
end;

Neutral General 27. Apr 2015 16:51

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Wenn du "x" auf String castest, dann gehts:

Delphi-Quellcode:
ShowMessage(String(x));

Popov 27. Apr 2015 16:59

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Hm, klappt, danke.

Allerdings hängt bei der Aktion noch ein fünftes Zeichen dran. Ich konnte es mit Trim beseitigen, weil es #8 war, aber kann man davon ausgehen, dass es immer #8 sein wird?

mkinzler 27. Apr 2015 17:01

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Nein, das war Zufall. Am Besten #0 anhängen.

himitsu 27. Apr 2015 17:16

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Für statische Char-Array, welche mit 0 indiziert sind, gibt es im Compiler einen impliziten Cast nach String, wobei das Array dann als PChar mit einer Maximallänge behandelt wird (String-Ende = #0 oder Array-Ende ... was halt zuerst kommt)

Bei statischen Arrays, welche nicht mit 0 beginnen, gibt es auch gerne Probleme.




Oder du gibst die Arrays manuell z.B. an Delphi-Referenz durchsuchenSetString.

p80286 28. Apr 2015 11:58

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Zitat:

Zitat von himitsu (Beitrag 1299440)
Bei statischen Arrays, welche nicht mit 0 beginnen, gibt es auch gerne Probleme.

So allgemein muß das aber nicht stimmen. Ich hab immer noch Programme im Einsatz, die mit fixen Datensätzen arbeiten und da kommen massenhaft
Delphi-Quellcode:
Satz: array [32..64] of char
drin vor. (D7) das schein dann wohl eher ein Problem der neueren Versionen zu sein.

Gruß
K-H

himitsu 28. Apr 2015 12:42

AW: Warum sieht Delphi einen dyn. Array of Char nicht als Zeichenkette an?
 
Kann auch sein, daß dieses Problem nur/vorwiegend bei Zuweisungen ala
Delphi-Quellcode:
Arr := S;
auftritt.

Ich hab halt nur noch in Erinnerung, daß es bei 0-indizierten Arrays insgesamt weniger Probleme gab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 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