Delphi Tips(2) stringからPChar、PAnsiCharへの変換

string型 から PChar や PAnsiChar などの「文字列ポインタ」に変換するのは、めんどくさい。
しかも、たまにしか使わないので、なかなか覚えられない。

というか、きちっと原理を理解していないのが原因だろう...

サンプルをメモっておきます

◆ソース

program test001;
{$APPTYPE CONSOLE}

uses
  System.SysUtils;

var
  str: string;
  p1: PChar;
  p2: PAnsiChar;
  p3: PWideChar;

begin
  str := 'テスト';

  GetMem(p1, length(str) + 1);
  GetMem(p2, length(str) + 1);
  GetMem(p3, length(str) + 1);

  StrPCopy(p1, str);
  StrPCopy(p2, str);
  StrPCopy(p3, str);

  WriteLn('p1:' + p1);
  WriteLn('p2:' + p2);
  WriteLn('p3:' + p3);

  FreeMem(p1);
  FreeMem(p2);
  FreeMem(p3);

  readln;

end.

◆結果

p1:テスト
p2:テスト
p3:テスト

◆ポイント

・ポインタ型は自分で変数の領域を確保する必要がある
・領域のサイズは、string型のサイズにnull文字分の1バイトを加えたサイズ
・string型のサイズはlengthを使って求める strLenでは無い
・string型を確保した領域にコピーするにはStrPCopyを使う StrCopyでは無い <-これにハマりました

Delphi Tips(2) stringからPChar、PAnsiCharへの変換” への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です