?
Braunstein schrieb:
Hallo,
Das kannst du prinzipiell schon so machen. Ich hätte da aber ein paar Anmerkungen.
Warum übergibst du ToValue als Parameter. Ich hätte das weggelassen und statt dessen einfach eine Rückgabe verwendet.
Ich dachte, weil ToValue sich in der Größe, bzw. Länge ändern kann, deswegen delete ich es auch am Anfang, um ihm eine neue Größe zuzuweisen.
Aber du hast Recht, ich könnte z.b. auch
char* __fastcall SetCharValue(char* ToValue, AnsiString FromValue, int MaxLength)
statt
void __fastcall SetCharValue(char* &ToValue, AnsiString FromValue, int MaxLength)
nehmen können. Allerdings hatte mich interessiert, wie und ob das mit dem
*&
funzt.
Hier ist die Abfrage unnötig.
if(ToValue)
{
delete [] ToValue;
}
Ein einfaches delete[] reicht hier auch da ein delete auf einen Nullzeiger einfach nichts macht.
Danke, das weiß ich, aber hab es mir irgendwie so angewöhnt.
ToValue = new char[FromValue.Length()+1];
if(!ToValue)
return;
Auch hier ist die Abfrage unnötig. new gibt hier nie einen Nullzeiger zurück. Im Fehlerfall wird hier eine bad_alloc Exception geworfen. Also eher die abfangen oder die nothrow-Variante von new verwenden.
Jetzt wo dus sagst, ist es mir auch wieder eingefallen
Dasc hier:
strcpy(ToValue, FromValue.SubString(1, MaxLength).c_str());
lässt sich einfacher durch strncpy ersetzen. Da brauchst du den Substring nicht.
Super, danke, die kannte ich noch nicht