PCharで、終わりを知るには?

解決


たわば先輩  2010-01-09 20:21:16  No: 36839

文字列をPCharに入れたんですが、これの終わりを知る方法ってありませんか?
Inc(P);
で、次々送っているんですが。

PCharが、ポイントっぽいのは分かります。

苦肉の策で、

if Length(string(PChar(P))) = 0 then break;

ってので、いけそうな気もするんですが、もっとスマートな方法ってありますか?


igy  2010-01-09 20:40:14  No: 36840

試していませんが、
if p = nil then break;
としたら、どうなりますか?


素直に  2010-01-09 20:42:30  No: 36841

if p^ = #0 then break;
でいいんじゃない?


igy  2010-01-09 20:53:16  No: 36842

“素直に”さんが書かれているように p^ ですね。

×:if p = nil then break;
○:if p^ = nil then break;


たわば先輩  2010-01-09 21:41:16  No: 36843

ループ中に、いろいろと試してみました。
こんな感じに。

ループ{

if p^ = #0 then
begin
  Form1.Memo2.Lines.Add('#0');
//  break;
end;

if Length(string(PChar(P))) = 0 then
begin
  Form1.Memo2.Lines.Add('Length');
//      break;
end;

いろいろと試してみて、期待通り動きそうなのは、この二つかな。

if p^ = nil then break;
は、[エラー] 互換性の無い型です、でコンパイラエラーになっちゃいますねー。

P in [] とかも考えたのですが、、、何を入れたら全体になるかが分からなかったので。
いっそのこと、Pに何かエンドマークを付け加えてin[]・・・とかも考えたのですが。^^;

速攻解決で、ありがとうございます。^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加