Null(#0)を含んだ文字の読込


電解コンデンサ  2005-08-31 04:49:04  No: 17324

Dllのメソッドを使うのに悩んでいます。

Read命令があるんですが、データを読み込むために、バッファへのポインタ引数と読み込むデータサイズ指定の引数があります。
その引数よりPCharを用いてデータを取るのはいいと思うのですが、読み込んだデータの中にNull文字が入っていたら、データサイズによらずそこでデータが切れてしまうと思うのです。
これをNull文字によらず、データサイズ分、きちんとデータが読み込める方法があるでしょうか?

乱文でもうしわけないです…


たかみちえ  URL  2005-08-31 05:54:36  No: 17325

"しまうと思うのです。"と言うことは、実際には試されていないのですか?
でしたら、まずは試してみることをお勧めします。Nullを含んだ文字の読み取りですが、わたしはさほど苦労した記憶はありません。


ですね。  2005-08-31 06:02:26  No: 17326

procedure TForm1.Button1Click(Sender: TObject);
var
  A: PChar;
  str:string;
  i:integer;
begin
  A:=PChar('ABC'+#0+'DEF');
  str:='';
  for i:=0 to 6 do
    if A[i]<>#0 then
      str:=str+Char(A[i]);
  caption:=str;
end;


anone  2005-08-31 06:33:19  No: 17327

> データを読み込むために、バッファへのポインタ引数と読み込むデータサイズ指定の引数があります。

適切にバッファを設定すると、#0 で string 型が途切れることはありません。
PChar で受け取ったら、適当にキャストなぞしないでちゃんと SetString() を
使って string 型に変換すると途切れることはありません。


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

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






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