Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Strings und PCHAR (https://www.delphipraxis.net/90615-strings-und-pchar.html)

SebE 20. Apr 2007 15:38


Strings und PCHAR
 
Delphi-Quellcode:
var
  c: PCHAR;

[...]

procedure TForm1.Button1Click(Sender: TObject); //Übergabe des "Original-Strings"
begin
c := pchar(edit1.text)
end;

procedure TForm1.Button2Click(Sender: TObject); //Sollte der "Orig.-String" ausgegeben werden (auch bei Änderung)
begin
edit2.Text := c
end;
Ich habe einen String (hier Edit1.Text) und einen Zeiger (hier c).
Jetzt muss ich ab und zu auf den String zugreifen (soll 'ne art Parser werden).
Problem: Der String kann/sollte sich ändern (zwischen den einzelnen Zugriffen), möchte aber nicht immer der "Parser-Routine" den String übergeben müssen.

Bei obigen Code-Beispiel kommt aber unerwartetes Zeugs raus -> es fehlt ein Zeichen (aber auch nicht immer).
-> Ich bekomme nicht den String, den ich benötige (nur Teile davon)

Einfachste Variante: ich nehm statt PCHAR einfach einen String und fertig is die Laube, aber, wenn sich mein "Original-String" ändert, erstellt Delphi automatisch einen NEUEN String (mit dem alten Inhalt) - das will ich aber nicht.
Was soll ich tun?

Kurz: In meinem Beispiel sollen Edit1.Text und Edit2.Text IMMER gleich sein (wenn man Button2Click ausführt)

Ich hoffe, ihr versteht mich und mein Problem und könnt mir helfen

ste_ett 20. Apr 2007 15:43

Re: Strings und PCHAR
 
Die Klasse TEdit hat ein Event OnChange. :)
Das kannst du dafür nutzen.

Jegliche Varianten über Strings, PChar, usw. sind alle nicht 100%, da durch Allokierung von Speicher sich der Bereich jederzeit ändern kann. :)

SebE 20. Apr 2007 16:05

Re: Strings und PCHAR
 
aber dann übergebe ich den String ja noch öfter.
Ich dachte mir eher: einmal zeigen, wo der Sting liegt und immer wieder damit arbeiten (auch wenn der Inhalt des Strings ein anderer ist)

Muetze1 20. Apr 2007 16:21

Re: Strings und PCHAR
 
1. Dein PChar() ist eine temporäre Konvertierung und der PChar wird mit verlassen der Button1Click() ungültig. Es ist pures Glück, dass beim 2. Button Click überhaupt noch was lesbares bei rauskommt.
2. Text vom TButton ist eine Eigenschaft. Hinter dieser liegen Setter und Getter und somit bekommst du nur einen Zeiger auf einen temporären String (Result des Getters) - das erklärt vllt. noch besser den Grund von 1. Aber zu deinem Problem des veränderns: Du kannst an dem temporären String soviel ändern wie du willst (und er gültig ist), aber das ist nicht der Edit Inhalt.

Lösung: Bau deinen Parser, gib ihm einen String als Var-Parameter. Dann innerhalb der Parser Funktion erstellst du dir wie bei Button1Click einen PChar und arbeitest mit diesem (auch veränderbar). Dieser ist dann über die gesamte Laufzeit deiner Parserroutine gültig. Damit kannst du dann arbeiten.

DP-Maintenance 20. Apr 2007 16:43

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

shmia 20. Apr 2007 16:52

Re: Strings und PCHAR
 
Zitat:

Zitat von SebE
Ich dachte mir eher: einmal zeigen, wo der Sting liegt und immer wieder damit arbeiten (auch wenn der Inhalt des Strings ein anderer ist)

Ein AnsiString ist ein Zeiger!!!
Beispiel:
Delphi-Quellcode:
var
   a, b , c: string;
begin
   a := 'ABCDEFG';
   b := a; // Delphi ist nicht dumm: b zeigt auf das Gleiche wie a
   c := b;
   c := c + '*'; // jetzt wird c in einen neue Speicherbereich kopiert und ein Sternchen angehängt


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

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