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では無い <-これにハマりました
ありがとう!救われました。