Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Einen String in Array of Char konvertieren


Tilman - Do 17.07.08 19:06
Titel: Einen String in Array of Char konvertieren
Die Frage ist hier [http://www.delphi-forum.de/viewtopic.php?t=85053&start=20&postorder=asc] aufgetreten, und interessiert mich jetzt auch selbst: wie kann man einen String einem Array of Char zuweisen. Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
 myText = array[1..30] of Char;

var
 text1: myText;


text1 := edit1.text;  // inkompatible typen
text1 := myText(edit1.text); // Ungültige Typumwandlung


Also würde mich interessieren wie das geht. Klar einfac hBuchstabe für Buchstabe durchgehen. Aber ob man das irgendwie doch noch casten kann, auch auf die Gefahr einer Exception hin (Wenn der String zu lang ist).


Christian S. - Do 17.07.08 19:14

Schon ewig kein Delphi mehr gemacht, aber:

Ich würde mir eine Hilfs-String-Variable machen und eine Typen PMyText = ^TMyText. Dann deklariere ich eine Variable vom Typ PMyText und lasse die auf das erste Zeichen des Hilfs-Strings zeigen.


GTA-Place - Do 17.07.08 19:20

Hehe, genau das was ich auch gebraucht hab.

StrPCopy, StrPLCopy oder CopyMemory. Siehe Hilfe :-P


Tilman - Do 17.07.08 22:00

aha, okay. werds mal testen.


Bergmann89 - Do 17.07.08 23:44

HI,

ich dachte immer ein String is das selbe wie ein Array of PChar, denn mann kann ja auch auf die Teilelemente des Strings mit MyString[x] zugreifen?! Das verwirrt mich jetzt irgendwie ^^

MfG Bergmann.


Tilman - Fr 18.07.08 20:19

Okay, habs jetzt hinbekommen: pMyText(pChar(edit1.text))^ = tMyText. Nicht schön, aber selten^^.


GTA-Place - Fr 18.07.08 20:20

Das ist doch nicht dein Ernst :shock:


Delphi-Quelltext
1:
2:
  SetLength(MyArray, Length(MyString));
  CopyMemory(@MyArray[0], @MyString[1], Length(MyArray));


Tilman - Fr 18.07.08 20:31

user profile iconGTA-Place hat folgendes geschrieben:
Das ist doch nicht dein Ernst :shock:


Delphi-Quelltext
1:
2:
  SetLength(MyArray, Length(MyString));
  CopyMemory(@MyArray[0], @MyString[1], Length(MyArray));


Okay, funzt auch, aber SetLength hab ich weggelassen - tMyText ist doch kein dynamisches array, länge ist ja bekannt.

// edit noch eine Frage: wenn ich sicherstellen kann dass edit1.text genau 30 zeichen entspricht, und das muss ich ja eh siehe oben, was spricht dann gegen pMyText(pChar())^ ?


GTA-Place - Fr 18.07.08 20:40

Dann nimm die von Delphi dafür vorgesehen Funktion StrPCopy:


Delphi-Quelltext
1:
StrPCopy(MyArray, MyString);                    


Tilman - Fr 18.07.08 20:48

user profile iconGTA-Place hat folgendes geschrieben:
Dann nimm die von Delphi dafür vorgesehen Funktion StrPCopy:


Delphi-Quelltext
1:
StrPCopy(MyArray, MyString);                    


Diese erfordert jedoch einen PAnsiChar (zumindest in meinem Delphi7 gibts keine Überladene Version). Müsste dann also mit new() erst das array erzeugen. Naja egal, die grundsätzlichen Vorgehensweisen kenn ich ja nun.


GTA-Place - Fr 18.07.08 21:20

Nein, dein Array muss nur bei 0 anfangen (Array[0..9] of Char). Siehe Delphi-Hilfe.