请问这段代码为何能循环(20分)

  • 主题发起人 主题发起人 hyp79
  • 开始时间 开始时间
H

hyp79

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
EnvPtr,savePtr:Pchar;
s:string;
begin
Envptr:=GetEnvironmentStrings;
savePtr:=EnvPtr;
repeat /*
s:=s+StrPas(EnvPtr);
s:=s+#13#10;
请问这段代码为何能循环
inc(EnvPtr,strlen(EnvPtr)+1);
until EnvPtr^=#0;
*/
FreeEnvironmentStrings(saveptr);
showmessage(s);

end;
 
很正常呀,难道你认为这段代码不应该循环?
 
你不就是作一个循环么?repeat...until..
 
zyy04说得对。在delphi中的三种循环.
whiledo
, for ,repeat .......until
 
我想你的疑惑是应该只运行一次就会跳出循环,其实GetEnvironmentStrings执行时会分配
一块内存用来存放所有的环境变量,每个环境变量之间用#0分隔,在内存块的最后用#0#0
表示所有环境变量结束,而strpas是将每个以#0结束的pchar转换成pascal表示的字符串
用strlen(EnvPtr)+1)是跳过每个分隔符#0
 
hhzh426说的好象有点道理也,:)
 
For 为何能循环
repeat...until..
 
thank you for hhzh426
 
接受答案了.
 
后退
顶部