Einzelnen Beitrag anzeigen

ThYpHoOn

Registriert seit: 9. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#1

s:string, s[i] <> string[1] ?!

  Alt 4. Jan 2011, 15:56
Bin (immer noch) dabei eine Scripter-Library von D5 auf Delphi XE zu portieren und nach gefühlten 1000 Char und PChar umwandlungen auf Ansi/Wide und vielen weiteren spaßigen Sachen bin ich auf folgendes gestoßen:

Code:
procedure TCustomxyz.FToggleStrCase(var S : string);
var
  i  : integer;
  len : integer;
  a  : string[1];
  b  : string[1];
begin
  len := Length(S);
  i := 1;
  while i <= len do
  begin
    {...}
    b := S[i];
    a := AnsiUpperCase(b);
    if a = b then
      S[i] := AnsiLowerCase(b)[1]
    else
      S[i] := a[1];
    inc(i);
  end;
end;
Der Code sieht nun eigentlich recht unspektakulär aus, aber der Compiler meckert nun bei dem letzten else ("S[i] := a[1];") dort sieht er S[i] als Char und a[1] als AnsiChar.
Schauen wir uns deren Deklaration mal genauer an:
S ist ein String, a ist auch ein String, allerdings als String[1] deklariert. WTF?! Der kastet also automatisch ein String[1] als Ansi und ein String als normalen (Unicode) Char.
Sehe ich das so richtig? Das verwirrt mich doch jetzt ein wenig...
  Mit Zitat antworten Zitat