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

解決


たわば先輩  2010-01-09 11:21:16  No: 36839  IP: [192.*.*.*]

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

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

苦肉の策で、

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

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

編集 削除
igy  2010-01-09 11:40:14  No: 36840  IP: [192.*.*.*]

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

編集 削除
素直に  2010-01-09 11:42:30  No: 36841  IP: [192.*.*.*]

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

編集 削除
igy  2010-01-09 11:53:16  No: 36842  IP: [192.*.*.*]

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

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

編集 削除
たわば先輩  2010-01-09 12:41:16  No: 36843  IP: [192.*.*.*]

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

ループ{

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[]・・・とかも考えたのですが。^^;


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

編集 削除