AGB  ·  Datenschutz  ·  Impressum  







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

StrLen() vs. Length()

Ein Thema von derpepe · begonnen am 28. Mär 2005 · letzter Beitrag vom 28. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#1

StrLen() vs. Length()

  Alt 28. Mär 2005, 15:55
Was ist eigentlich der Unterschied zwischen den o.g. Funktionen?

Guckt euch mal das "Delphi Example" zu StrLen in der Delphi-Hilfe an, da findet sich folgender u.a. Code:
HalfLen := StrLen(PChar(string(Edit1.Text))) div 2; Warum nicht
HalfLen := Length(Edit1.Text) div 2; ???

Bisher dachte ich StrLen für PChars und Length für Strings.
Laut dem Beispiel nehmen die da aber StrLen.
Warum?
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 15:57
Zitat von derpepe:
Guckt euch mal das "Delphi Example" zu StrLen in der Delphi-Hilfe an
Warum da StrLen benutzt wird? Um die Funktion StrLen zu erklären, vermute ich mal
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#3

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:00
In diesem Beispiel ist wohl die Möglichkeit mit Length() besser. Allerdings gibt Length() einen String zurück, StrLen scheinbar ein PChar. Kommt also immer drauf an, was man grade braucht (PChar oder String). Weil das Umwandeln ist ja doch noch mühsame Tipparbeit
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#4

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:00
Es ist ein freche Behauptung, aber vielleicht weil String und PChar nicht das gleiche ist?!

Während nämlich ein PChar immer auf #0 endet, die Länge also die Anzahl der Zeichen bis zur #0 ist, ist ein String ein sogenannter gezählter Stringtyp. Das heißt, es gibt ein Feld welches zum String gehört, in dem die Anzahl der Zeichen im String angegeben ist. Dieses wird von Length() zurückgegeben und berücksichtigt nicht irgendwelche #0 im String.
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#5

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:01
*g* dann gibt's für StrLen keinen besseren Verwendungszweck?
Das kann ja auch mal ned sein...
Irgendeine Daseinsberechtigung muss die Funktion doch haben, auch wenn diese mir momentan Rätsel aufgibt.
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Benutzerbild von gordon freeman
gordon freeman

Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
 
Delphi 2005 Personal
 
#6

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:03
Zitat von malo:
Allerdings gibt Length() einen String zurück, StrLen scheinbar ein PChar.
Geben nicht beide Funktionen einen Integer-Wert zurück
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:05
Zitat von derpepe:
Was ist eigentlich der Unterschied zwischen den o.g. Funktionen?
Length ist eine Pascal-Funktion, für welche der Compiler entscheidet wie diese eingesetzt wird (Typenabhängig). Für Strings die schnellste und einzig garantiert korrekte Variante.

StrLen ist eine Funktion, welche die Länge eines Null-terminierten Strings berechnet indem diese das erste #0 Zeichen sucht. Diese ist speziell für PChars.

Strings können #0 Zeichen enthalten, daher würde letztere Funktion evtl. einen Fehler zurückliefern, wenn diese für String Variablen genutzt wird.

PChars enden immer auf #0 und können somit kein #0 Character enthalten und kommen aus der C/C++ Ecke

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#8

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:06
Zitat von derpepe:
*g* dann gibt's für StrLen keinen besseren Verwendungszweck?
Das kann ja auch mal ned sein...
Irgendeine Daseinsberechtigung muss die Funktion doch haben, auch wenn diese mir momentan Rätsel aufgibt.
Bitte bitte erst die Antworten lesen! Der Unterschied sollte wohl deutlich aus meiner obigen Ausführung hervorgehen (wie ich gerade sehe versucht es sakura gerade mit gleichen Ausführungen).
Schlimm genug, daß dieser Unterschied zwischen PChar und String nicht Allgemeinwissen eines Delphiprogrammierers zu sein scheint.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#9

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:06
Zitat von gordon freeman:
Zitat von malo:
Allerdings gibt Length() einen String zurück, StrLen scheinbar ein PChar.
Geben nicht beide Funktionen einen Integer-Wert zurück
Ich meine natürlich, StrLen wertet einen PChar aus, und Length einen String

Und einen Thread zum Vergleich von PChar und String gabs ja schonmal
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#10

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:17
Details, habe den Link soeben wiedergefunden, finden sich unter:
http://www.manuel-poeter.de/index.php?site=tutorials

Im "Strings"-Tutorial.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:49 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