Autor Beitrag
NewMori
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.09.10 16:49 
Hi,
es ist wahrscheinlich eine einfache Frage aber ich finde einfach keine Antowrt im Internet. Es geht darum, dass ich in meinem Programm einen Pointer auf einen String brauche, dabei muss ich den Strings selber erzeugen und verwalten. Ich weis jetzt aber nicht was eine String Variable ist, also ob dies ein Pointer auf einen String ist also (StringVariable^=Adresse). Außerdem, wie weise ich dem String einen Wert zu, das heißt ich habe den Pointer auf den String, kann ich dann nach String casten oder muss ich noch irgendetwas beachten, wie zB selber Speicher reservieren oder macht das Delphi für mich?

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 20.09.10 16:52 
Für einen Pointer auf einen String nimmst du am Besten PChar.

_________________
Markus Kinzler.

Für diesen Beitrag haben gedankt: NewMori
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.09.10 16:56 
Kann ich dann einfach das schreiben:
ausblenden Delphi-Quelltext
1:
PChar(Pointer)=TestString;					

und Delphi kümmert sich drum? Ich kenne mich mit Strings leider kaum aus da ich das ganze meist komplett mit GetMem und Pointern regle. Aber ich brauche jetzt halt eine Art Schnittstelle.

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mo 20.09.10 17:44 
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 20.09.10 17:47 
Wenn du nur kurze Strings bis maximal 255 Zeichen brauchst, dann würde ich shortstring verwenden, da kannst du dann ganz einfach einen Zeiger drauf setzen, so wie man es mit arrays und soweiter auch macht. Ein ShortString belegt im Speicher immer 256 Bytes (das erste Byte ist für die Länge), der enthaltene String kann aber natürlich kürzer sein. Wenn du keine 256 Zeichen brauchst, kannst du auch kürzere Typen anlegen, etwa string[20] oder string[50] etc., wobei immer ein Byte mehr (eben für die Länge des Strings) reserviert wird.

Das Array im Beispiel habe ich nur angelegt, um zu zeigen dass Pointerarithmetik möglich ist mit Shortstrings:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type  parr = ^tarr;
      tarr = array[0..4of Char;

procedure TForm1.Button1Click(Sender: TObject);
  var
    arr: parr;
    kurz: shortstring;
begin
  kurz := 'Das ist ein gar nichtmal so kurzer String';
  arr := @kurz;
  inc(arr,4);
  showmessage(arr^);  // --> "htmal"
end;

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)

Für diesen Beitrag haben gedankt: NewMori
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 20.09.10 18:00 
Ich möchte da kurz user profile iconjaenicke zitieren:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconTankard hat folgendes geschrieben Zum zitierten Posting springen:
string[0] kann man lesen, nur beschreiben sollte man es nicht. da in string[0] die länge des strings steht.

Das war vor 15 Jahren bei Delphi 1 so und ist heute nur noch bei den selten verwendeten ShortStrings so...

Ein String ist heute ein Pointer auf eine Zeichenkette, vor deren Anfang (also in dem Bereich vor dem, auf den der Pointer zeigt) die Länge als 4-Byte-Integer steht und danach der Referenzzähler, ebenfalls 4 Byte. Mit dem Index 0 kommst du also dort mit Sicherheit nicht mehr an die Länge und das sagt dir Delphi beim Versuch zu kompilieren auch AFAIK.

Grüße
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.09.10 19:26 
Ja, vielen Dank, sowas hatte ich gesucht, ich wuste halt nicht was Pointer ist und was nicht ich habe es jetzt umgestellt.

_________________
Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.