AGB  ·  Datenschutz  ·  Impressum  







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

WideString - länge "korrigieren"

Ein Thema von ralfiii · begonnen am 17. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

WideString - länge "korrigieren"

  Alt 17. Dez 2008, 16:10
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: WideString - länge "korrigieren"

  Alt 17. Dez 2008, 16:18
Bei Delphi sind Strings nicht Null Terminiert! Kannst du dir die Position nicht merken und dann mittels Copy(...) arbeiten?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#3

Re: WideString - länge "korrigieren"

  Alt 17. Dez 2008, 16:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: WideString - länge "korrigieren"

  Alt 17. Dez 2008, 16:42
die Suche nach der terminierenden 0 und davon abhängig ein SetLength ist unter diesen Umständen wohl die beste Lösung.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: WideString - länge "korrigieren"

  Alt 17. Dez 2008, 16:55
Hallo ralfiii,

du könntest es so versuchen:

Delphi-Quellcode:
var
  s : string;
begin
  s := PChar('result'#0'ing');
end;
Gruß Hawkeye
  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 12:12 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