Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zu PChar mach Mist - hängt zuviel Zeichen dran. (https://www.delphipraxis.net/63700-string-zu-pchar-mach-mist-haengt-zuviel-zeichen-dran.html)

emsländer 21. Feb 2006 20:11


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

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

Delphi-Quellcode:
  db  := ini.ReadString('GENERELL','datenbank','');

in dem String finde ich dann auch den gewünschten Inhalt: isdn

jetzt wandle ich das um:

Delphi-Quellcode:
 _MySQLdb := pansichar(db);
oder auch:

Delphi-Quellcode:
 _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:

Delphi-Quellcode:
    _MySQLdb  : PChar = 'isdn';
Gruss

EL

brechi 21. Feb 2006 20:27

Re: String zu PChar mach Mist - hängt zuviel Zeichen dran.
 
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 ;)

jbg 21. Feb 2006 20:39

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

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.

emsländer 21. Feb 2006 20:47

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

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! :wall: :wall:

Danke!

Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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