Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi WideString - länge "korrigieren" (https://www.delphipraxis.net/126078-widestring-laenge-korrigieren.html)

ralfiii 17. Dez 2008 15:10


WideString - länge "korrigieren"
 
Wenn bei einem Widestring irgendwo ein Doppel-NullByte eingefügt wird, wie kann ich dann Delphi verklickern, dass es den Längen-wert korrigieren sollte?

z.B.
alter Inhalt : "TestString"
neuer Inhalt : "result'#0'ing"

length(x) liefert noch immer 10.
setlength(x, StrLen(PChar(string(x)))) kann's ja net sein, das muss schöner gehen.

Danke!


P.S.: Das gleiche Problem mit "normalen" strings demonstriert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
     s:='Hallo'+#0+Caption;
     Memo1.Lines.Add('length = '+IntToStr(length(s)));
     Memo1.Lines.Add(s);
end;
Wie "korrigiere" ich s, so dass Length hier 5 liefert?
Setlength(pos(#0... ist ja auch so eine miese Lösung, da gibt's doch sicher was "richtiges"...
Danke!

Bernhard Geyer 17. Dez 2008 15:18

Re: WideString - länge "korrigieren"
 
Bei Delphi sind Strings nicht Null Terminiert! Kannst du dir die Position nicht merken und dann mittels Copy(...) arbeiten?

ralfiii 17. Dez 2008 15:31

Re: WideString - länge "korrigieren"
 
Zitat:

Zitat von Bernhard Geyer
Bei Delphi sind Strings nicht Null Terminiert! Kannst du dir die Position nicht merken und dann mittels Copy(...) arbeiten?

Ich hab da nicht viel Wahl - das sind Rückgabewerte von einer DLL die erwartet dass ich den (maximal benötigten) Speicher für die Strings reserviere. Und die DLL liefert einfach Null-terminierte Strings.

Sieht in etwa so aus:

Delphi-Quellcode:
setlength(a, 20);
setlength(b, 100);
MyDLLFunction(Pointer(a), Pointer(b));
... und jetzt sind da irgendwelche Strings drin, mit einer Länge <20 bzw 100.
Nur eben das die Längeninfo von den Strings noch immer den alten Wert enthält.

Ich hoffe jetzt wird klarer was das Problem ist.

SirThornberry 17. Dez 2008 15:42

Re: WideString - länge "korrigieren"
 
die Suche nach der terminierenden 0 und davon abhängig ein SetLength ist unter diesen Umständen wohl die beste Lösung.

Hawkeye219 17. Dez 2008 15:55

Re: WideString - länge "korrigieren"
 
Hallo ralfiii,

du könntest es so versuchen:

Delphi-Quellcode:
var
  s : string;
begin
  s := PChar('result'#0'ing');
end;
Gruß Hawkeye


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