![]() |
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 |
Re: string in array of char kopieren
|
Re: string in array of char kopieren
oder vielleicht so:
Delphi-Quellcode:
Gruß
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; K-H |
Re: string in array of char kopieren
ein String ist ja praktisch zusätzlich noch 0-terminiert
Delphi-Quellcode:
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)
var
s : string; sa: array[0..1023] of char; begin s := ' beispieltext |'; move(s[1], sa[0], length(s) + 1); showmessage(sa); end;
Delphi-Quellcode:
s := ' beispieltext |';
if s = '' then sa[0] := #0 else move(s[1], sa[0], length(s) + 1); showmessage(sa); |
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).
|
Re: string in array of char kopieren
Da PChar zu Array of Char zuweisungskompatibel ist, erähne ich hier einfach nur mal
![]() |
Re: string in array of char kopieren
Zitat:
denn s[1] wird wohl die Exception auslösen, da dort auf ein Char zugegriffen wird, welches nicht existiert. |
Re: string in array of char kopieren
Zitat:
Zitat:
|
Re: string in array of char kopieren
Zitat:
In der Originalversion kracht es nicht! Versuch es einfach mal :angel2: |
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:
oder mal etwas effektiver:
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;
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; |
Re: string in array of char kopieren
Äh.. hat jemand Muetze1's Beitrag gelesen? :mrgreen:
|
Re: string in array of char kopieren
ja und bei mir isses oftmals standardmäßig bis zum Release an :zwinker:
|
Re: string in array of char kopieren
Zitat:
1. Geht es auch um einige Feinheiten in den anderen Implementationen 2. Muetze1' Code macht nicht was verlangt wird, zumindest bis Delphi 10 wird nicht der komplette String kopiert, sondern es wird beim 1. #0 abgebrochen, d.h von '123'#0'abc' kommt halt nur '123'#0 im array an. Das mag ja in den meisten Fällen erwünscht sein, ist aber zumindest nicht das, was gefordet wurde: Zitat:
|
Re: string in array of char kopieren
Zitat:
|
Re: string in array of char kopieren
Zitat:
|
Re: string in array of char kopieren
Zitat:
Grundlegend kann auch davon ausgehen, dass ein String seiner Bestimmung Verwendung findet, sprich: nicht als binärer Datencontainer. Aber nun gut, bitte unterbreite mir weitere deiner Argumente... |
Re: string in array of char kopieren
Zitat:
Festzuhalten bleibt allerdings, daß StrPLCopy eventuell nicht den ganzen String kopiert (und es ist nützlich, wenn man das weiß). Und wie ich schon in #13 geschrieben habe, mag dieses Verhalten ja erwünscht sein. Schönes Wochenende Gammatester |
Re: string in array of char kopieren
Ähm *hust*
ich hätte da noch eine etwas andere Definition von String zu bieten. Der String enthält alle Zeichen, die ich in ihn hineinpacke incl #0,#9,#13,#10 usw.. Und da ich mit Delphi/Pascal programmiere erwarte ich, daß alle Zeichen von S[1] bis S[length(S)] verarbeitet werden. Wenn eine API-Funktion (#0) einem da einen Strich durch die Rechnung macht, ist das ärgerlich und man sollte darauf vorbereitet sein, daß soetwas passieren könnte. Es ist also wichtig zu wissen, ob die Daten in einem String interpretiert werden (z.B. Bildschirmausgabe, Ausdruck ) oder ob es sich bei dem String um einen reinen Datenkontainer handelt. Wobei die Interpretation der enthaltenen Zeichen, ja stark Systemabhängig ist. So wurde unter DOS jedes Zeichen (#0..#255) auf dem Bildschirm dargestellt, während es unmöglich war alle Zeichen auf einem Drucker auszugeben . Gruß K-H |
Re: string in array of char kopieren
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: string in array of char kopieren
Zitat:
in einem String sind Zeichen enthalten. Deren Natur ist es, daß sie interpretiert werden (sollten). Nicht umsonst gibt es den Begriff Steuerzeichen. Und je nachdem welcher Font zur Darstellung/Interpretation benutzt wird werden unterschiedliche Zeichen auch gleich dargestellt, bzw. das gleiche Zeichen (Byte-Wert) wird unterschiedlich dargestellt. Aber man sollte sich bewußt sein, daß Routinen die mit Strings umgehen mal auf Zeichenebene und mal auf Byteebene arbeiten - z.B. beim Sortieren und/oder vergleichen. (Unicode und andere MultiByteZeichensätze lassen wir jetzt erst einmal außen vor) was den Int10 und Int21 angeht, da muß ich zugeben, daß ich die beiden wann immer es ging umgangen hab' und gleich in den Videospeicher geschrieben hab. (Aber das ist so alt, das es schon garnicht mehr wahr ist.) Gruß K-H |
Re: string in array of char kopieren
Delphi-Quellcode:
var
B: array[0..1023] of Char; S: String;
Delphi-Quellcode:
Reicht völlig.
if Length(B) > Length(S) then
StrCopy(B, PChar(S)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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 by Thomas Breitkreuz