Hab's gefunden (in falscher
Unit gesucht
)
StrNew, welches man allerdings nur mit StrDispose wieder freigeben kann (es sei denn man rechnet die kranke Längenangabe raus)
Hmmm, nicht ganz ... das kopiert ja nur, aber reserviert keinen Speicher.
Ich mein eher sowas sie DupStr/StrDup aus C++.
Nja, aber StrLCopy (weil ja nicht der ganze String kopiert werden soll), zusammen mit einem GetMem würde sich gut in einer Funktion machen.
Delphi-Quellcode:
function DupStr(str: PAnsiChar; MaxLen: NativeInt = -1): PAnsiChar; override; // MaxLen incl. #0
function DupStr(str: PWideChar; MaxLen: NativeInt = -1): PWideChar; override;
function DupStr(str: PAnsiChar; MaxLen: NativeInt = -1): PAnsiChar;
begin
if MaxLen = 0 then
Exit(nil);
if MaxLen < 0 then
MaxLen = StrLen(str) + 1;
Result := GetMemory(MaxLen * SizeOf(str^));
try
StrLCopy(Result, str, MaxLen);
finally
FreeMemory(P);
end;
end;
function DupStr(str: PWideChar; MaxLen: NativeInt = -1): PWideChar;
...
NewStr und
Dispose für PChars (man darf nur nicht vergessen, daß Delphi dort noch eine Längenangabe drin versteckt)
SetString = von PChar zu String
DupStr = von PChar/String zu PChar