Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String nach array[0..1024] of Char (https://www.delphipraxis.net/70144-string-nach-array%5B0-1024%5D-char.html)

faux 25. Mai 2006 19:07


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:
var
  MyArray: array[0..1024] of Char;
  Temp: string;
begin
  CopyMemory(@MyArray, @Temp[1], Length(Temp));
end;
Jedoch bekomme ich dann anstatt von C:\ftp immer C:\ftpæx€????. Also den String mit etwas Datenmüll hintendran.
Woran liegt das? Ist meine Kopiermöglichkeit so überhaupt richtig?

Grüße
Faux

Ratte 25. Mai 2006 19:10

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

SirThornberry 25. Mai 2006 19:14

Re: String nach array[0..1024] of Char
 
mach einfach
Delphi-Quellcode:
CopyMemory(@MyArray, @Temp[1], Length(Temp) + 1);
bzw.
Delphi-Quellcode:
CopyMemory(@MyArray, @Temp[1], Length(Temp));
MyArray[Length(Temp)] := #0;
bzw.
Delphi-Quellcode:
ZerorMemory(@MyArray, SizeOf(MyArray));
CopyMemory(@MyArray, @Temp[1], Length(Temp) + 1);
Es fehlt also nur die Abschließende #0
Aber darüber brauchst du dir eigentliche keine Gedanken machen wenn das Array bereits mit #0 gefüllt ist (also mit #0 initialisiert wurde).

faux 25. Mai 2006 19:14

Re: String nach array[0..1024] of Char
 
Zitat:

Zitat von Ratte
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).

Ja aber ich gebe CopyMemory doch die Länge des Strings. Ich schätze mal, dass diese Funktion einfach von 0 bis zur Längenangabe beide Pointer einfach erhöt und Byteweise die Daten kopiert.

Grüße
Faux

faux 25. Mai 2006 19:15

Re: String nach array[0..1024] of Char
 
Zitat:

Zitat von SirThornberry
mach einfach
[delphi]
CopyMemory(@MyArray, @Temp[1], Length(Temp) + 1);

Kay! Klar! Ich habe immer -1 geschrieben, weil ich dachte, dass da zu viel kopiert wird. :wall:

Danke!

Grüße
Faux

SirThornberry 25. Mai 2006 19:16

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)

Hawkeye219 25. Mai 2006 19:31

Re: String nach array[0..1024] of Char
 
Noch 'ne Möglichkeit:

Delphi-Quellcode:
StrPCopy(MyArray, Temp);
Gruß Hawkeye

faux 25. Mai 2006 19:33

Re: String nach array[0..1024] of Char
 
Zitat:

Zitat von Hawkeye219
Noch 'ne Möglichkeit:

Delphi-Quellcode:
StrPCopy(MyArray, Temp);

:lol: Wieso nicht gleich so? :mrgreen:
Hat das irgendwelche Nachteile gegenüber meinem Versuch?

Grüße
Faux

Hawkeye219 25. Mai 2006 19:46

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: Delphi-Referenz durchsuchenStrPLCopy.

Gruß Hawkeye

turboPASCAL 26. Mai 2006 09:10

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.
Seite 1 von 2  1 2      

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