Re: Funktion um Stringlänge zu ermitteln
Hallo Luckie,
per definition ist ein Delphi-String nicht durch ein null-Zeichen begrenzt sondern durch die Längenbeschreibung am Anfang des Datenbereichts. Mir ist bewusst, dass er Gründen der vereinfachten Kompatibilität mit einem null-Zeichen endet, um Ausdrücke der Art
Delphi-Quellcode:
ohne eine erneute Kopie zu realisieren, aber Deine Implementierung von mylength ist kein Ersatz für Length, weil es Fälle gibt, in denen die Rückgabewerte voneinander abweichen können:
PChar(AString)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const AString = 'a delphi string can contain '#0' several '#0' null characters'; begin Assert( Length(AString) = mylength(AString) ); end; |
Re: Funktion um Stringlänge zu ermitteln
Jupp. Stimmt, aber auf die Schnelle ist mir nichts besseres eingefallen. ;)
|
Re: Funktion um Stringlänge zu ermitteln
Ich erwähne, dass es auch nicht um die Funktion direkt geht, es ging eig. nur darum, um ihm zu zeigen,
wie das mit eigenen Funktionen, Parametern und Rückgabewerten geht ;) Die eigentliche Idee war ja auf der meines Freundes basiert, ich hatte sie zuerst nur so umgesetzt air |
Re: Funktion um Stringlänge zu ermitteln
Aber versucht mal, per Code auf MeinString[0] zuzugreifen.
Das mag der Compiler nicht ;) |
Re: Funktion um Stringlänge zu ermitteln
Zitat:
|
Re: Funktion um Stringlänge zu ermitteln
mit nem statischen string geht das aber, siehe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: string[255]; begin s := 'blah'; Showmessage(IntToStr(Byte(s[0]))); end; |
Re: Funktion um Stringlänge zu ermitteln
Ein "normaler" Pascal-String hat am Anfang soweit ich weiß ein DWORD als Längenbeschreibung, wieso nicht das auslesen?
Delphi-Quellcode:
Edit: Da war ein Adressoperator zu viel ;)
function MyLen(S: string): Integer;
begin Result := PDWORD(Integer(S)-4)^; end; |
Re: Funktion um Stringlänge zu ermitteln
das gibt aber falsche ergebnisse
|
Re: Funktion um Stringlänge zu ermitteln
Zitat:
Mein Kumpel weiss nichtmal wie man eigene Funktionen deklariert, dann wird er ja schreien bei dem Einzeiler (da bin ich übrigens auch kurz davor *gg*) air |
Re: Funktion um Stringlänge zu ermitteln
AnsiStrings benutzen ja jetzt 4 Bytes = 1 Integer um die Länge zu speichern, deswegen geht s[0] nicht.
So ähnlich geht es aber immer noch:
Delphi-Quellcode:
function Len(const s: string): Integer;
begin if Pointer(s) = nil then Result := 0 else Result := PInteger(Cardinal(s) - 4)^; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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