![]() |
Pointer to String; String to Pointer
Hi,
ist es möglich einen Pointer als String zu Speichern und andersherum einen String wieder zu einem Pointer zu "machen"? Generell ist ein Pointer ja nur ein Zeiger der auf etwas Zeigt, was meiner meinung nach die Sache erschwert, da man einen String nicht einfach mit so zuweisen kann:
Delphi-Quellcode:
Dadurch würde ja der Pointer auf den String zeigen und nicht auf den Pointer der als String gespeichert ist.
var
s:String; p:pointer; begin p:=pointer(s); end; Rakogan |
Re: Pointer to String; String to Pointer
Das Stichwort ist
![]() |
Re: Pointer to String; String to Pointer
Delphi-Quellcode:
var
s:String; p:pointer; begin p := @s[1]; // oder p := PChar(s); // zurück mit s := PChar(p); end; |
Re: Pointer to String; String to Pointer
hallo ersmal :hi:
der offizielle Weg wäre
Delphi-Quellcode:
P := PChar(S);
aber es kommt drauf an, was du vor hast ... soll der Pointer auf den String zeigen oder soll hinter dem Pointer eine eigene Kopie des Strings liegen und wenn Letzeres, worüber willst du den Speicher für die Stringdaten im Pointer reservieren? [edit] @satty1:
Delphi-Quellcode:
aber paß auf ... wenn der String leer ist, dann knallt es hier gewaltig, da es kein Zeichen am Index 1 gibt :zwinker:
p := @s[1];
|
Re: Pointer to String; String to Pointer
Hallo
ich interpretiere die Frage so, daß Rakogan gerne den "wert" eines Pointers ausgeben will, etwa so: Zeiger auf wertx: 0x012DA4E34 das liefe dann auf InttoHex oder InttoStr hinaus. Gruß K-H |
Re: Pointer to String; String to Pointer
Zitat:
Zitat:
Aber ist trotzdem falsch und PChar sowieso der richtigere Cast. |
Re: Pointer to String; String to Pointer
Zitat:
und wenn man S mal ändert, dann könnte P auch mal schnell ins (n)Irgendwo hinzeigen hier S:=PChar(P); wird aber der Text, auf welchen P zeigt kopiert und die Kopie in S abgespeichert. wenn zu z.B. eine eigene Kopie in P anlegen willst ... wobei es da auch noch viele andere Wege gibt, welche teilweise sogar noch direkt auf Strings/Texte ausgelegt sind (die fallen mir aber grad nicht ein, da ich sie nicht nutze)
Delphi-Quellcode:
P := GetMem(Length(S) + 1);
MoveMemory(P, PChar(S), Length(S) + 1); // und wenn man den Speicher/Text von P nicht mehr braucht, // dann muß man den natürlich wieder freigeben FreeMem(P); Zitat:
|
Re: Pointer to String; String to Pointer
Danke für die ganzen Hilfen
ich hab es jetzt ganz simpel gelöst^^ Pointer auslesen:
Delphi-Quellcode:
Pointer zuweisen:
var
s:String; p:pointer; begin s:=inttostr(integer(p)); end;
Delphi-Quellcode:
Für Kommentare und Anregungen dazu bin ich immer offen ;-)
var
s:String; p:pointer; begin p:=pointer(strtoint(s)); end; |
Re: Pointer to String; String to Pointer
also so wandelst du nur den Pointer selber in einen String(bzw. den binären Zeigerwet in einen dezumalen String)
was willst du denn nun erreichen/machen? |
Re: Pointer to String; String to Pointer
ich glaube p80286 hatte recht... :roll:
*** dann, weil es mich interessiert hat:
Delphi-Quellcode:
Deshalb gibt es auch bei leerem String wohl keine AV.
S := '';
P := PChar(S); //mov eax,[ebp-$04] //call @LStrToPChar P := @S[1]; //lea eax,[ebp-$04] //call UniqueString Trotzdem, auf @S[1] zugreifen ohne eine Gültigkeitsprüfung ist schlechter Code und soll nicht zur Nachahmung dienen. Ich wollte nur wissen, warum es ging! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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