Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi noob frage: array [0..259] of char in string un umgekehrt (https://www.delphipraxis.net/98683-noob-frage-array-%5B0-259%5D-char-string-un-umgekehrt.html)

Weazy 30. Aug 2007 22:32


noob frage: array [0..259] of char in string un umgekehrt
 
Eine komponente die ich benutze hat ein property mit dem typ array [0..259] of char. Dieses property möchte ich nun schreiben und lesen. Hier ist mein versuch, doch es klappt irgendwie nicht so ganz...

Delphi-Quellcode:
function CharToStr(chr: array [0..259] of char):string;
var
i:integer;
begin
for i:=0 to 259 do
result[i]:=chr[i];
end;

function StrToChar(str:string):array [0..259] of char;
var
i:integer;
begin
for i:=0 to 259 do
result[i]:=str[i];
end;

3_of_8 30. Aug 2007 22:34

Re: noob frage: array [0..259] of char in string un umgeke
 
Bei CharToStr erst noch ein setlength(result, length(chr));

Aber eigentlich müsste das auch als direkte Zuweisung funktionieren, also Result:=chr; und umgekehrt.

Rastaman 30. Aug 2007 23:16

Re: noob frage: array [0..259] of char in string un umgeke
 
Array of char is doch das Gleiche wie String oder? :shock:

@3_of_8: SetLength bei vorgegebener Größe von 260? Is das nich nur für dynamische Arrays?

TBx 31. Aug 2007 00:00

Re: noob frage: array [0..259] of char in string un umgeke
 
Du bekommst schon alleine deshalb Probleme, weil die Indizierung von Strings bei 1 beginnt und nicht wie von Dir gecoded bei 0.

Gruß

onlinekater

BTW: Was ist das für eine Komponente? Es wird ja sicherlich seinen Grund haben, dass ein solches array of char verwendet wird. Sollte es womöglich passieren können, dass ein Element dieses Arrays #0 ist? Dann wäre mit erreichen dieses Elementes der String automatisch zu Ende.

3_of_8 31. Aug 2007 00:51

Re: noob frage: array [0..259] of char in string un umgeke
 
@Rastaman: Sein Rückgabetyp ist ein String, kein String[260]. Und er kann nicht einfach in einen String mit noch nicht zugewiesenem Speicher schreiben, weil ein Leerstring nämlich standardmäßig auf nil zeigt. Und ein array of Char ist nicht ganz das gleiche wie ein String. Es ist im Speicher fast das gleiche, aber die Compiler Magic schlägt beim String mehr zu und außerdem hängt an Strings immer noch ein #0 dran.

Hansa 31. Aug 2007 01:19

Re: noob frage: array [0..259] of char in string un umgeke
 
Zitat:

Zitat von Weazy
..array [0..259] of char... doch es klappt irgendwie nicht so ganz...

Wie üblich wurde die genaue Fehlermeldung unterschlagen und dann die Frage gestellt. 8) Wundert mich allerdings, dass keiner bemerkt hat, dass der Wert nicht im Bereich von 0..255 liegt, sondern darüber hinausgeht.

Sunlight7 31. Aug 2007 02:19

Re: noob frage: array [0..259] of char in string un umgeke
 
Zitat:

Zitat von Hansa
Wundert mich allerdings, dass keiner bemerkt hat, dass der Wert nicht im Bereich von 0..255 liegt, sondern darüber hinausgeht.

Mich nicht, weil vielleicht MAX_PATH (260 Zeichen) von der Komponente verwendet wird.



Delphi-Quellcode:
type
  TChr=array[0..259] of char;

function CharToStr(chr: TChr):string;
begin
   Result:=Chr;
end;

function StrToChar(str:string):TChr;
begin
   StrPLCopy(Result, Str, 260);
end;

Hansa 31. Aug 2007 02:25

Re: noob frage: array [0..259] of char in string un umgeke
 
Dann wundert Dich das wohl auch kaum :

Zitat:

Zitat von Weazy
for i:=0 to 259 do
result[i]:=chr[i];


Sunlight7 31. Aug 2007 02:43

Re: noob frage: array [0..259] of char in string un umgeke
 
Das wurde 1. schon angesprochen, 2. von mir nicht weiter verwendet und wär 3. ne (umständliche) Möglichkeit, wenn wie bereits gesagt SetLength verwendet und der kleine Fehler korrigiert würde...

Delphi-Quellcode:
for i:=0 to 259 do
result[i+1]:=chr[i];

Hansa 31. Aug 2007 02:47

Re: noob frage: array [0..259] of char in string un umgeke
 
Welches Zeichen ergibt denn :
Delphi-Quellcode:
ch := chr (259);
Macht das Sinn ? :mrgreen:

Sunlight7 31. Aug 2007 02:59

Re: noob frage: array [0..259] of char in string un umgeke
 
Zitat:

Zitat von Hansa
Welches Zeichen ergibt denn :
Delphi-Quellcode:
ch := chr (259);
Macht das Sinn ? :mrgreen:

Macht viel Sinn, denn jetzt weiß ich, das Du die Funktionsweise von Arrays noch net verstanden hast :mrgreen:

Betrachte mal den Unterschied, vielleicht fällt Dir was auf ;)

ch := chr (259); <- Du

ch := chr [259]; <- Ich

Und betrachte zusätzlich das: chr: array [0..259] of char;


Wenn Du jetzt was klingeln hörst is es net die Türklingel :mrgreen:

mkinzler 31. Aug 2007 05:35

Re: noob frage: array [0..259] of char in string un umgeke
 
Man sollte den Array aber nicht chr nennen

3_of_8 31. Aug 2007 07:40

Re: noob frage: array [0..259] of char in string un umgeke
 
Kann man aber.

mkinzler 31. Aug 2007 07:47

Re: noob frage: array [0..259] of char in string un umgeke
 
Zitat:

Zitat von 3_of_8
Kann man aber.

Ich schreib auch "sollte man nicht" und nicht "darf man nicht"

SirThornberry 31. Aug 2007 08:09

Re: noob frage: array [0..259] of char in string un umgeke
 
nehmt einfach move. Mit einem vorherigen SetLength sind das gerade mal 2 kleine Zeilen. Und vor allem ist es schneller als eine Schleife wo jedes Zeischen einzeln kopiert wird.

bernau 31. Aug 2007 08:29

Re: noob frage: array [0..259] of char in string un umgeke
 
Zitat:

Zitat von Weazy
Eine komponente die ich benutze hat ein property mit dem typ array [0..259] of char. Dieses property möchte ich nun schreiben und lesen. Hier ist mein versuch, doch es klappt irgendwie nicht so ganz...

Unabhängig von der Diskussion, wie man die Funktionen implementiert....

Warum verwendest du nicht die fertigen Funktionen

strpcopy und strpas


Gerd

jottkaerr 31. Aug 2007 08:52

Re: noob frage: array [0..259] of char in string un umgeke
 
Hallo,

wieso nicht einfach so:

Delphi-Quellcode:
type
  TCharArray = array[0..259] of Char;

function CharToStr(chr: TCharArray):string;
begin
  Result := chr;
end;

function StrToChar(str:string):TCharArray;
begin
  if Length(str) > Length(Result) - 1 then
    raise Exception.Create('Nicht genügend Platz im Array!');

  StrPCopy(Result, Str);
end;
Arrays lassen sich nicht direkt als Ergebnistyp einer Funktion angeben, daher
der Umweg über die Typdefinition.

Nullbasierte Arrays of Char können direkt an eine String-Variable zugewiesen
werden. Den umgekehrten Weg kann man mit StrPCopy gehen, wobei man aber die
Überprüfung der Array-Größe nicht vergessen sollte.

jkr

Weazy 1. Sep 2007 15:19

Re: noob frage: array [0..259] of char in string un umgeke
 
also es geht um das delphi sqx sdk, bei welchem passwörter und pfade mit array [0..259] angegeben werden sollen:-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz