Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string in array of char kopieren (https://www.delphipraxis.net/136880-string-array-char-kopieren.html)

DelphiManiac 9. Jul 2009 12:46


string in array of char kopieren
 
Sorry für die wahrscheinlich "simple" Frage,

aber ich habe trotzt Forensuche nicht das gefunden was ich gesucht habe.

Folgendes will ich machen

ich habe ein array of char[0.1023] und einen String

jetzt will ich die chars vom string in den array kopieren...

Doch mit Stringoperationen bin ich nicht so vertraut (natürlich schon wie ein string aufgebaut inst (/0 terminiert oder mit Längenangabe etc..)

Mir fehlt hier lediglich die dazugehörige Delphi-Funktion?!

Danke euch!

Gruß
DM

Klaus01 9. Jul 2009 13:06

Re: string in array of char kopieren
 
Hallo,

schau mal hier

Grüße
Klaus

p80286 9. Jul 2009 13:10

Re: string in array of char kopieren
 
oder vielleicht so:
Delphi-Quellcode:
var
  s : string;
  sa: array[0..1023] of char;
begin
  fillchar(sa,sizeof(sa),#0);
  s:=' beispieltext |';
  move(s[1],sa[0],length(s));
  showmessage(sa);
end;
Gruß
K-H

himitsu 9. Jul 2009 13:26

Re: string in array of char kopieren
 
ein String ist ja praktisch zusätzlich noch 0-terminiert
Delphi-Quellcode:
var
  s : string;
  sa: array[0..1023] of char;
begin
  s := ' beispieltext |';
  move(s[1], sa[0], length(s) + 1);
  showmessage(sa);
end;
und falls der String mal leer ist, dann solte man besser noch die Exception verhindern (welche übrigens auch in p80286's Code auftreten würde)
Delphi-Quellcode:
s := ' beispieltext |';
if s = '' then sa[0] := #0
else move(s[1], sa[0], length(s) + 1);
showmessage(sa);

gammatester 9. Jul 2009 13:49

Re: string in array of char kopieren
 
Dein Code ist mM keine Verbesserung und p80286's Code wird auch keine Exception auslösen, falls der String mal leer ist; denn length ist dann 0 und es wird nix verschoben. Was bei Euch beiden fehlt ist ein Test if length(s)<sizeof(sa)... (Die beliebten Bufferoverflows lassen grüßen).

Muetze1 9. Jul 2009 14:10

Re: string in array of char kopieren
 
Da PChar zu Array of Char zuweisungskompatibel ist, erähne ich hier einfach nur mal Delphi-Referenz durchsuchenStrPLCopy()

himitsu 9. Jul 2009 14:12

Re: string in array of char kopieren
 
Zitat:

Zitat von gammatester
... und p80286's Code wird auch keine Exception auslösen

versuch es einfach mal :angel2:

denn s[1] wird wohl die Exception auslösen, da dort auf ein Char zugegriffen wird, welches nicht existiert.

Muetze1 9. Jul 2009 14:13

Re: string in array of char kopieren
 
Zitat:

Zitat von himitsu
versuch es einfach mal :angel2:

Dito.

Zitat:

Zitat von himitsu
denn s[1] wird wohl die Exception auslösen, da dort auf ein Char zugegriffen wird, welches nicht existiert.

Nur wenn die Bereichsprüfung aktiviert ist gibt es eine ERangeCheckError Exception und sonst nicht. Und man bedenke, dass diese Prüfung standardmässig aus ist.

gammatester 9. Jul 2009 14:34

Re: string in array of char kopieren
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von gammatester
... und p80286's Code wird auch keine Exception auslösen

versuch es einfach mal :angel2:

denn s[1] wird wohl die Exception auslösen, da dort auf ein Char zugegriffen wird, welches nicht existiert.

Ich habe es ausprobiert :!: Mag sein, daß es bei Dir kracht. Aber nur in Deiner verschlimmbesserten Version, bei der wegen length(s)+1 wirklich auf s[1] zu gegriffen wird.

In der Originalversion kracht es nicht! Versuch es einfach mal :angel2:

himitsu 9. Jul 2009 18:37

Re: string in array of char kopieren
 
tja, beim debuggen sollte man halt gewisse optionen mal aktivieren (z.B. die Indexprüfung) :angel2:

array immer 0-terminiert und immer ohne exceptions
Delphi-Quellcode:
var
  s, s2: string;
  sa: array[0..1023] of char;
begin
  s := ' beispieltext |';

  s2 := Copy(s, 1, High(sa));
  move(PChar(s2)^, @sa, (length(s2) + 1) * SizeOf(Char));
  showmessage(sa);
end;
oder mal etwas effektiver:
Delphi-Quellcode:
var
  s: string;
  sa: array[0..1023] of char;
  i: integer;
begin
  s := ' beispieltext |';

  i := Max(Length(s), High(sa));
  move(PChar(s)^, sa, i * SizeOf(Char));
  sa[i] := #0;
  showmessage(sa);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.
Seite 1 von 3  1 23      

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