1

私はカスタム構造操作プログラムを書いています、そして私は以下のタイプを持っています:

type
StrLen = 0..MaxLen;
Str = ^StrInst;

StrInst = record
length: StrLen;
data: array [StrPos] of char;
end;

次に、次の手順を実行します。

procedure  ReadStr(var S: Str);
var  pos: StrLen;
begin
      S^.length:=0;
      pos := 0;
      writeln('pos before entering:',pos);
      writeln;
      with  S^  do begin
        repeat
                Inc(pos);
                Read(data[pos]);
        until   (ord(data[pos]) = 13)   or   (pos > MaxLen+1);
        writeln('pos after entering:',pos);
        length := pos-1;
      end;
end;

問題は、そのタイプの2番目のオブジェクトを読み取ると、pos変数、つまり長さフィールドが1ずつ不思議な増加をしていることです。次のコード

ReadStr(S1);
ReadStr(S2);

出力(どちらの場合も「123」を入力した場合):

 pos before entering:0
 123 
 pos after entering:4

 pos before entering:0 
 123 
 pos after entering:5

誰かが私のために状況をクリアしてくれれば、とてもうれしいでしょう。前もって感謝します。

4

1 に答える 1

1

プログラムの関連する可能性のある部分が欠落しています。特に、これが Windows の場合 (ファイルの読み取り方法によっては)、2 番目の文字列に余分な文字が含まれる可能性があります。これは、CR で停止し、次の LF を処理していないためです。

于 2011-03-12T09:40:44.480 に答える