Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Implizite String-Umwandlung von 'ShortString' zu 'String' (https://www.delphipraxis.net/185803-implizite-string-umwandlung-von-shortstring-zu-string.html)

Cubysoft 7. Jul 2015 14:11

Implizite String-Umwandlung von 'ShortString' zu 'String'
 
Hey,

ich habe ein kleines Problem (geht nur um eine Warnung, möchte aber sicher gehn, wie ich diese wegbekomme und auch, was sie wirklich bedeutet)

Delphi-Quellcode:
type
TTest=record
 id: String[6];
end;

function MachWasMitID(id:String);
begin
   //iwas mit der ID machen
end;
Ich habe einen String mit fester Länge (String[6]) gewählt, weil dieser in einem Record enthalten ist, welches in eine typisierte Datei gespeichert werden soll. Da ich aber schon etliche Funktionen habe, die im Parameter einen String haben und nicht einen ShortString, habe ich beim Umstellen einige dieser Warnungen.

Meine Frage ist nun: Wie bekomme ich diese weg? Und hat das irgendwelche Folgen?

Danke!

uligerhardt 7. Jul 2015 14:44

AW: Implizite String-Umwandlung von 'ShortString' zu 'String'
 
Dein
Delphi-Quellcode:
string[6]
kann (im Gegensatz zum "einfachen"
Delphi-Quellcode:
string
) nur ANSI-Zeichen aufnehmen, keine Unicode-Zeichen. Wenn das kein Problem für dich ist, kannst du die Warnung einfach wegcasten.
Delphi-Quellcode:
MachWasMitID(string(test.ID));
sollte dann reichen.

Bjoerk 7. Jul 2015 14:44

AW: Implizite String-Umwandlung von 'ShortString' zu 'String'
 
Dein String[6] ist immer ein Ansistring.

p80286 7. Jul 2015 15:14

AW: Implizite String-Umwandlung von 'ShortString' zu 'String'
 
Zitat:

Zitat von uligerhardt (Beitrag 1308019)
Dein
Delphi-Quellcode:
string[6]
kann (im Gegensatz zum "einfachen"
Delphi-Quellcode:
string
) nur ANSI-Zeichen aufnehmen, keine Unicode-Zeichen. Wenn das kein Problem für dich ist, kannst du die Warnung einfach wegcasten.
Delphi-Quellcode:
MachWasMitID(string(test.ID));
sollte dann reichen.

wenn er keine wilden Tricks auf Lager hat wie z.B.
Delphi-Quellcode:
mystring[0]:=#0
; oder
Delphi-Quellcode:
for i:=1 to Byte(Mystring[0]) do.....
sollte es klappen.

Ich hab mir angewöhnt,
Delphi-Quellcode:
string
nur noch da zu verwenden, wo es egal ist ob ANSI, UTF8, Wide oder was auch immer. Alle Anderen Strings sind explizit Typisiert.


Gruß
K-H

Uwe Raabe 7. Jul 2015 15:18

AW: Implizite String-Umwandlung von 'ShortString' zu 'String'
 
Mit den erweiterten Möglichkeiten von Records kann man das ganz elegant wegdeklarieren, so daß die unsauberen Casts nur an einer Stelle vorkommen:

Delphi-Quellcode:
type
  TTest = record
  private
  type
    Str6 = String[6];
  var
    Fid: Str6;
    function GetId: string;
    procedure SetId(const Value: string);
  public
    property Id: string read GetId write SetId;
  end;

function TTest.GetId: string;
begin
  Result := string(FId);
end;

procedure TTest.SetId(const Value: string);
begin
  FId := Str6(Copy(Value, 1, 6));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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