[英]StrPCopy is deprecated. What is the alternative?
這是我的問題:您如何擺脫此代碼給出的關於StrPCopy被棄用的警告? 或換種說法-我如何擺脫我認為最終會消失的StrPCopy? 我根本不想使用AnsiString單元。
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
var
aAmount: array[0..12] of AnsiChar;
TempStr: string;
begin
TempStr := '123456789012';
StrPCopy(aAmount, TempStr);
WriteLn(aAmount);
ReadLn;
end.
警告 :不推薦使用ANSI版本的StrPCopy。 請使用AnsiStrings單元。
因此解決方案是改為調用System.AnsiStrings.StrPCopy
。
順便說一句,問題中的代碼有緩沖區溢出。 您的數組是一個長度太短的元素。
好的,現在您已經更改了問題。 您想要實現StrPCopy
而不使用System.AnsiStrings
。 就像這樣:
function StrPCopy(Dest: PAnsiChar; const Source: AnsiString): PAnsiChar;
begin
Result := Dest;
Move(PAnsiChar(Source)^, Pointer(Dest)^, Length(Source)+1);
end;
我不太確定為什么您不想使用System.AnsiStrings
單元。 我看不出有任何明顯的理由回避它。
事實證明,您想要在沒有AnsiStrings
單元的情況下執行操作,只需執行以下操作:
function NicksStrPCopy(const Source: AnsiString; Dest: PAnsiChar): PAnsiChar;
begin
Move(PAnsiChar(Source)^, Dest^, Length(Source) + 1); // +1 for the 0 char
Result := Dest;
end;
這有點低級,但是所有其他有用的例程也都在AnsiStrings
單元中定義,您要避免。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.