![]() |
String nach array[0..1024] of Char
Hallo!
Ich habe folgendes Problem: Ich will einen String in einen Array[0..1024] of Char bekommen. Ich habe folgendes Probiert:
Delphi-Quellcode:
Jedoch bekomme ich dann anstatt von C:\ftp immer C:\ftpæx€????. Also den String mit etwas Datenmüll hintendran.
var
MyArray: array[0..1024] of Char; Temp: string; begin CopyMemory(@MyArray, @Temp[1], Length(Temp)); end; Woran liegt das? Ist meine Kopiermöglichkeit so überhaupt richtig? Grüße Faux |
Re: String nach array[0..1024] of Char
Da fehlt warscheinlich das nullzeichen am ende des Strings. Du liest einfach noch den ganzen Müll der noch im Speicher stand mit aus (bis zum Ende oder zum nächsten nullzeichen).
Ratte |
Re: String nach array[0..1024] of Char
mach einfach
Delphi-Quellcode:
bzw.
CopyMemory(@MyArray, @Temp[1], Length(Temp) + 1);
Delphi-Quellcode:
bzw.
CopyMemory(@MyArray, @Temp[1], Length(Temp));
MyArray[Length(Temp)] := #0;
Delphi-Quellcode:
Es fehlt also nur die Abschließende #0
ZerorMemory(@MyArray, SizeOf(MyArray));
CopyMemory(@MyArray, @Temp[1], Length(Temp) + 1); Aber darüber brauchst du dir eigentliche keine Gedanken machen wenn das Array bereits mit #0 gefüllt ist (also mit #0 initialisiert wurde). |
Re: String nach array[0..1024] of Char
Zitat:
Grüße Faux |
Re: String nach array[0..1024] of Char
Zitat:
Danke! Grüße Faux |
Re: String nach array[0..1024] of Char
eigentlich kannst du das auch weglassen weil der Record der dir dort mit den Array übergeben wird bereits mit #0 initialisiert ist. (in deinem TestProgramm musst du es natürlich selbst machen)
|
Re: String nach array[0..1024] of Char
Noch 'ne Möglichkeit:
Delphi-Quellcode:
Gruß Hawkeye
StrPCopy(MyArray, Temp);
|
Re: String nach array[0..1024] of Char
Zitat:
Hat das irgendwelche Nachteile gegenüber meinem Versuch? Grüße Faux |
Re: String nach array[0..1024] of Char
Ich sehe einen Vorteil: es funktioniert zuverlässig mit Leerstrings. Ich habe nicht ausprobiert, wie sich deine Routine in diesem Fall verhält.
Die Funktion gibt es übrigens auch mit Längenbeschränkung: ![]() Gruß Hawkeye |
Re: String nach array[0..1024] of Char
Es gibt ja auch die Windowsfunktionen:
Delphi-Quellcode:
var
MyArray: array[0..1024] of Char; Temp: string; begin Temp := 'Hallo'; {Windows.}lstrcpy(MyArray, @Temp[1]); Showmessage(MyArray); end; |
Re: String nach array[0..1024] of Char
Zitat:
Delphi-Quellcode:
Bei eingeschalteter Bereichsüberprüfung wirft dieser Code sehr zuverlässig eine Exception :wink:
{$R+}
Temp := ''; {Windows.}lstrcpy(MyArray, @Temp[1]); {$R-} Falls Leerstrings auftreten können, würde ich die Delphi-Funktion bevorzugen. Gruß Hawkeye |
Re: String nach array[0..1024] of Char
Oder so:
Delphi-Quellcode:
Es ist halt eine Frage ob diese SysUtils verwendet werden soll oder nicht. ;)
windows.lstrcpyn()
|
Re: String nach array[0..1024] of Char
Das wäre ein Ersatz für die Delphi-Funktion StrPLCopy - mit den gleichen Schwierigkeiten bei Leerstrings.
Das Problem bei den Windows-Routinen ist ja, daß der Fehler bereits vor dem eigentlichen Call auftritt. Der Zugriff auf das erste Zeichen über Temp[1] führt bereits zu einer Exception. Da hilft leider auch die beste Windows-Routine nicht mehr... Gruß Hawkeye |
Re: String nach array[0..1024] of Char
Du kannst aber eine Funktion schreiben mit deren Hilfe so etwas ausgeschlossen wird, zB. mit if, then und else. ;)
Delphi-Quellcode:
if Temp = '' then Temp := #0;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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