![]() |
Delphi-Version: 5
Zugriff auf String^ (String pointer)
Hallo,
nehmen wir folgenden Code an:
Delphi-Quellcode:
Da gibt's eine Fehlermeldung, ich schätze das mit den Pointern habe ich nicht so ganz verstanden in FP.
var
NormalerString : String; PointerString : ^String; . . NormalerString := 'Hallo Welt!'; PointerString := Pointer(Integer(@NormalerString) + 5); ShowMessage(String(PointerString^)); Kann mir das bitte einer erklären? Danke! |
AW: Zugriff auf String^ (String pointer)
Delphi-Quellcode:
Einfach so.
NormalerString := 'Hallo Welt!';
PointerString := @NormalerString; ShowMessage(PointerString^); |
AW: Zugriff auf String^ (String pointer)
Was hast Du vor?
|
AW: Zugriff auf String^ (String pointer)
Zitat:
Zitat:
|
AW: Zugriff auf String^ (String pointer)
Delphi-Quellcode:
Sollte so gehen.
var
NormalerString : String; PointerString : PChar; . . NormalerString := 'Hallo Welt!'; PointerString := @NormalerString[5]; ShowMessage(PointerString); |
AW: Zugriff auf String^ (String pointer)
Zitat:
Warum geht mein code nicht? Ich caste die Adresse von NormalerString doch als Integer, addiere 5 drauf, Caste das wieder als Pointer und weise es einem Pointe rzu, warum ist das falsch? |
AW: Zugriff auf String^ (String pointer)
Weil ein String an Stelle [0] die Länge gespeichert hat und ich glaube davor sogar noch ein paar Informationen.
Wenn du einen String-Pointer einfach um 5 nach hinten verschiebst gibt es diese Informationen davor nicht, weil davor ja die anderen Buchstaben stehen. Außerdem ist ein String schon ein Pointer. Wenn du @StringVariable schreibst ist das ein Pointer auf den String-Pointer. Und wenn du den verschiebst landest du irgendwo im Nirvana. |
AW: Zugriff auf String^ (String pointer)
// EDit: nvm
|
AW: Zugriff auf String^ (String pointer)
Lies den 2. Teil meiner Antwort.
=>
Delphi-Quellcode:
Das ist aber deutlich gefährlicher in Hinblick auf Unicode strings ab Delphi 2009.
var
NormalerString : String; PointerString : PChar; begin NormalerString := 'Hallo Welt!'; PointerString := PChar(Integer(NormalerString) + 5); ShowMessage(PointerString); |
AW: Zugriff auf String^ (String pointer)
Zitat:
Delphi-Quellcode:
sollte man immer auf der sicheren Seite sein.
pteilstr:=@Mystring[5];
Bei Arrays ist's übrigens genauso. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 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