掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PChar (ID:14263)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> どのようにしてコピーせずに文字列をPChar(の参照先?)として認識してるのでしょうか? ちょっと、以下のコードを試してみてください。 procedure TForm1.Button1Click(Sender: TObject); var s:string; p:PChar; begin s := 'ピーチャーって何だ?'; Label1.Caption := 'string 型の変数のサイズは '+IntToStr(SizeOf(s)); Label2.Caption := 's[1] のアドレスは '+IntToStr(Cardinal(@s[1])); Label3.Caption := '変数 s の中身は '+IntToStr(Cardinal(s)); p := PChar(s); Label4.Caption := ' p の値は '+IntToStr(Cardinal(p)); end; 結果を見ると、 1.string 型の変数のサイズは4バイトであり、文字列の先頭の文字を指すポインタである。 2.PChar(s) のようなコードは、string 型の変数が保持している値を PChar にキャストしているだけ。 が分かります。キャストではなく、明示的に PChar 型の変数にメモリを割り当てるときは、以下のようにします。 procedure TForm1.Button2Click(Sender: TObject); var p:PChar; s:string; Wnd:HWND; begin s := 'notepad'; GetMem(p,Length(s)+1);// #0 までコピーする try Move(s[1],p^,Length(s)+1); Wnd := FindWindow(p,nil); Label5.Caption := IntToStr(Wnd); finally FreeMem(p); end; end; このように、明示的にメモリを確保したときは、明示的に開放しなければなりません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.