2

私は Borland Delphi で作業しており、Borland C++ Builder には数行のコードがあります。これらの行を Delphi ソースに翻訳したいと思います。

unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];
for (i=0; i<SPS*2; i++)
   buf[i]=2;

... ... ...

answers=buf[2];

この buf に PCHar 値を割り当てたいと思います。

a:PCHar;
a:=buf.
4

2 に答える 2

6

実際には、次のとおりです。

unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];

最初の割り当ては次の*buf=NULLように変換できますが、ポインターの内容は関数によってすぐに上書きされるためbuf := nil、純粋なデッド コードです。bufnew

したがって、C コードは次のように変換できます。

var buf: PAnsiChar;
    i: integer;
begin
  Getmem(buf,SPS*2);
  for i := 0 to SPS*2-1 do
    buf[i] := #2;
...
  Freemem(buf);
end;

より Delphi の慣用的なバージョンは次のようになります。

var buf: array of AnsiChar;
    i: integer;
begin
  SetLength(buf,SPS*2);
  for i := 0 to high(buf) do
    buf[i] := #2;
  ...
  // no need to free buf[] memory (it is done by the compiler)
end;

または直接:

var buf: array of AnsiChar;
    i: integer;
begin
  SetLength(buf,SPS*2);
  fillchar(buf[0],SPS*2,2);
  ...
  // no need to free buf[] memory (it is done by the compiler)
end;
于 2011-11-01T12:16:38.797 に答える
1

おそらく次のようになります。

var
  buf: array of AnsiChar;
  a: PAnsiChar;
...
SetLength(buf, SPS*2);
FillChar(buf[0], Length(buf), 2);
a := @buf[0];

何が何であるかはわかりませんanswersが、C++ コードにあると仮定すると、char次のように記述できます。

var
  answers: AnsiChar;
...
answers := buf[2];
于 2011-11-01T12:17:35.183 に答える