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 2 von 2     12   
MathiasSimmack
(Gast)

n/a Beiträge
 
#11

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:21
Zitat von sakura:
PChars enden immer auf #0 und können somit kein #0 Character enthalten und kommen aus der C/C++ Ecke
Ich erinnere dich mal an die Dateiauswahl beim Öffnen-Dialog - nonVCL. Sicher, der PChar endet auf Null, er enthält aber diverse #0-Zeichen zwischendrin, mit denen die einzelnen Dateinamen voneinander getrennt werden.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:24
Zitat von MathiasSimmack:
Zitat von sakura:
PChars enden immer auf #0 und können somit kein #0 Character enthalten und kommen aus der C/C++ Ecke
Ich erinnere dich mal an die Dateiauswahl beim Öffnen-Dialog - nonVCL. Sicher, der PChar endet auf Null, er enthält aber diverse #0-Zeichen zwischendrin, mit denen die einzelnen Dateinamen voneinander getrennt werden.
Und woher soll man dann wissen, welches #0 den PChar nun wirklich abschließt?
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:27
Oh Ja, sorry, hätte ich sagen müssen: Der PChar endet mit #0#0. Das heißt, beim Versuch, den nächsten String der Liste anzuspringen, landest du auf dem zweiten #0-Zeichen und solltest die Schleife dann beenden. Funktioniert recht gut , wie du in den Win32-API-Tutorials von Luckie sehen würdest.
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#14

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:28
*Heul* ... und auch dies ist kein Problem, denn es ist nur eine Aneinanderreihung von PChars. Diese Methode wird bei den Performance Countern und überall angewandt. Unter Delphi muß man dann eben über alle PChars hinwegspringen, bis man zu einem #0#0 kommt - unter C wäre dies einfach ein

Code:
LPSTR pc;

while(lstrlen(pc))
  pc++;
Unter Delphi mußt du zum Pchar-Wert entsprechend die Länge des ersten PChars + 1 hinzuaddieren um direkt hinter der nächsten #0 zu landen. Dies muß man unter Delphi explizit tun, will heißen so "schön" wie in C sieht der Code dann nicht aus

Ach ja, REG_MULTI_SZ speichert seine Werte exakt so. Eine clevere Erfindung (obwohl dazu nicht viel gehört), wie ich meine.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

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

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 16:31
Zitat von MathiasSimmack:
Oh Ja, sorry, hätte ich sagen müssen: Der PChar endet mit #0#0.
Gehört jetzt nicht hierher, aber kurz, das nennt sich dann aber auch PChar-Array MS brauchte halt eine einfache Möglichkeit Arrays zu übergegben

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#16

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 18:33
Zitat von Mephistopheles:
Code:
LPSTR pc;

while(lstrlen(pc))
  pc++;
Und geht das ist richtig?

Annahme: pc = "Und\0Los\0\0"

lstrlen(pc) == 3 => while(true)
pc++ => pc == "nd\0Los\0\0"
lstrlen(pc) == 2 => while(true)
pc++ => pc == "d\0Los\0\0"
lstrlen(pc) == 1 => while(true)
pc++ => pc == "\0Los\0\0"
lstrlen(pc) == 0 => while(false) => Ende.

Sollte pc nicht als Array von LPSTR deklariert sein?

Code:
LPSTR *pc;

while(lstrlen(*pc))
  pc++;

Oder habe ich da einen Denkfehler? Dann aber begründen.
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

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

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 18:37
Zitat von Mephistopheles:
Schlimm genug, daß dieser Unterschied zwischen PChar und String nicht Allgemeinwissen eines Delphiprogrammierers zu sein scheint.
Der Unterschied zwischen PChar und String ist klar. V.a. da ich auch ab und an was in C++ schreib(en muss).

Allerdings ist mir nicht klar wie Borland (oder wer auch immer) auf das von mir oben genannte Beispiel kommt....
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#18

Re: StrLen() vs. Length()

  Alt 28. Mär 2005, 19:23
Zitat von jbg:
Sollte pc nicht als Array von LPSTR deklariert sein?
Nein, das nicht. Aber du hast recht, daß statt ++ wohl eher ein += lstrlen(pc) + 1 stehen sollte

@derpepe: Der Kommentar war allgemein dahingesagt. Ich gehe davon aus, daß Borland dies benutzt, um 1. StrLen() zu demonstrieren (und da will man eben keine komplizierten Sachen nehmen, die vom Thema ablenken) und
2. EDITs sowieso immer nullterminierten Text enthalten und also das Beispiel nicht unlogisch wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:03 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