AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi String zu PChar mach Mist - hängt zuviel Zeichen dran.
Thema durchsuchen
Ansicht
Themen-Optionen

String zu PChar mach Mist - hängt zuviel Zeichen dran.

Ein Thema von emsländer · begonnen am 21. Feb 2006 · letzter Beitrag vom 21. Feb 2006
Antwort Antwort
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#1

String zu PChar mach Mist - hängt zuviel Zeichen dran.

  Alt 21. Feb 2006, 21:11
Moin,

Problem: Hab hier einen String, den ich aus einer .INI auslese:

  db := ini.ReadString('GENERELL','datenbank','');
in dem String finde ich dann auch den gewünschten Inhalt: isdn

jetzt wandle ich das um:

 _MySQLdb := pansichar(db); oder auch:

 _MySQLdb := pchar(db); klappt soweit. Ich wundere mich das ich somit nicht auf die Datenbank komme.
Ein Anzeigen im Memotext ergibt:

Access denied for user 'isdn'@'%' to database 'isdn'

Da wird an das Wort "isdn" noch irgendein Schwachfug drangehängt.

Wie kann ich das verhindern?

wenn ich hingegen den Wert direkt an PChar übergebe, klappt es:

    _MySQLdb : PChar = 'isdn'; Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: String zu PChar mach Mist - hängt zuviel Zeichen dran.

  Alt 21. Feb 2006, 21:27
Delphi-Quellcode:
var s: string;
begin
  s := 'elelelel';
  delete(s,5,1);
  s[length(s)+1] := 'o'; {so etwas passiert bei dir}
  form1.caption := pchar(s)+' - '+pchar(copy(s,1,length(s)));
ein PChar muss zwingend ein #0 am schluss haben, ein string jedoch nicht. Durch Speicherverkleinerung, d.h. löschen von Buchstaben
innerhalb eines String, kann es sein, dass am schluss eben nicht #0 gesetzt wird sondern nur die Stringlänge angepasst wird.

das Beispiel oben verdeutlich es.
Eine Kopie des Strings zeigt es richtig an.
Eigentlich sollte aber Delphi in der Lage sein bei einer String to PChar Umwandlung dem PChar am schluss nen #0 dranzuhängen.

Wenn du da nicht irgend nen müll baust
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: String zu PChar mach Mist - hängt zuviel Zeichen dran.

  Alt 21. Feb 2006, 21:39
Zitat von brechi:
Durch Speicherverkleinerung, d.h. löschen von Buchstaben innerhalb eines String, kann es sein, dass am schluss eben nicht #0 gesetzt wird sondern nur die Stringlänge angepasst wird.
Auch eine falsche Erklärung ist eine Erklärung. Delphi sorgt bei LongString aka AnsiString (=string in Win32) immer dafür, dass dieser mit einem #0 endet, das an S[Length(S) + 1] steht.


Zitat:
Wenn du da nicht irgend nen müll baust
Wie z.B. einen String, der in einer lokalen Variable abgelegt ist, an den Aufrufer als PChar zu zurückzuliefern. In diesem Fall wird nämlich der Speicherbereich auf den der zurückgelieferte PChar zeigt, freigegeben und ggf. durch andere Daten überschrieben.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: String zu PChar mach Mist - hängt zuviel Zeichen dran.

  Alt 21. Feb 2006, 21:47
Zitat von jbg:
Zitat:
Wenn du da nicht irgend nen müll baust
Wie z.B. einen String, der in einer lokalen Variable abgelegt ist, an den Aufrufer als PChar zu zurückzuliefern. In diesem Fall wird nämlich der Speicherbereich auf den der zurückgelieferte PChar zeigt, freigegeben und ggf. durch andere Daten überschrieben.
Genau das wars!

Danke!

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  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 13:22 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