AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Strings und PCHAR

Ein Thema von SebE · begonnen am 20. Apr 2007 · letzter Beitrag vom 20. Apr 2007
Antwort Antwort
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

Strings und PCHAR

  Alt 20. Apr 2007, 16:38
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
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Strings und PCHAR

  Alt 20. Apr 2007, 16:43
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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#3

Re: Strings und PCHAR

  Alt 20. Apr 2007, 17:05
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)
Sebastian
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Strings und PCHAR

  Alt 20. Apr 2007, 17:21
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.
  Mit Zitat antworten Zitat
20. Apr 2007, 17:43
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Strings und PCHAR

  Alt 20. Apr 2007, 17:52
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
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 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