![]() |
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; |
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. |
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? |
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. |
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.
|
Re: noob frage: array [0..259] of char in string un umgeke
Zitat:
|
Re: noob frage: array [0..259] of char in string un umgeke
Zitat:
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; |
Re: noob frage: array [0..259] of char in string un umgeke
Dann wundert Dich das wohl auch kaum :
Zitat:
|
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]; |
Re: noob frage: array [0..259] of char in string un umgeke
Welches Zeichen ergibt denn :
Delphi-Quellcode:
Macht das Sinn ? :mrgreen:
ch := chr (259);
|
Re: noob frage: array [0..259] of char in string un umgeke
Zitat:
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: |
Re: noob frage: array [0..259] of char in string un umgeke
Man sollte den Array aber nicht chr nennen
|
Re: noob frage: array [0..259] of char in string un umgeke
Kann man aber.
|
Re: noob frage: array [0..259] of char in string un umgeke
Zitat:
|
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.
|
Re: noob frage: array [0..259] of char in string un umgeke
Zitat:
Warum verwendest du nicht die fertigen Funktionen strpcopy und strpas Gerd |
Re: noob frage: array [0..259] of char in string un umgeke
Hallo,
wieso nicht einfach so:
Delphi-Quellcode:
Arrays lassen sich nicht direkt als Ergebnistyp einer Funktion angeben, daher
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; 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 |
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