Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18

Re: length(s) = 0 ODER s = '' ?

  Alt 13. Mär 2006, 10:01
Zitat von thomasw:
Mich wundert, dass der Compiler das nicht erkennt und entsprechend optimiert...
Was soll er denn da optimieren? Bei der ersten Zuweisung "S := #0" wird ein String generiert, der das #0-Zeichen enthält, also Length(S) = 1. StrLen(PChar(S)) hingegen würde 0 liefern, weil ein PChar auf #0 endet. Ein AnsiString/WideString endet aber nicht bei #0, sondern er endet da, wo der Puffer zu Ende ist, und das ist nach dem #0-Zeichen, was also eine Länge von 1 ergibt.
Das ist eben ein kleiner, aber feiner Unterschied zwischen PChar und String.

Unter .NET ist das aber wieder was anderes, da es dort in C# einen Unterschied macht, ob man S=NULL oder S="" schreibt. Ersteres wird als S:=nil interpretiert. Zweiteres hingegen als ein gültiges Leer-String Objekt. Man muss in .NET also immer auf beides prüfen: if (S != NULL && S != "") wenn man sicher gehen will, dass kein Null-String/Leer-String verarbeitet wird. Die Length() Funktion von Delphi fängt beide Fälle ab. In C# hingegen kracht es, wenn man S.length() aufruft, und S==NULL ist.
  Mit Zitat antworten Zitat