我正在编写一个自定义结构操作程序,我有以下类型:
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;
问题是,当我读入该类型的第二个对象时, 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
如果有人为我清理情况,那将非常高兴。提前谢谢。
答案 0 :(得分:1)
你遗漏了一些可能相关的程序部分。特别是,如果这是在Windows上(取决于您如何读取文件),您可能在第二个字符串中有一个额外的字符,因为您停在CR并且不处理以下LF。