Delphi单步调试中的问题??(各位兄弟肯定也遇到过!!!) (50分)

  • 主题发起人 主题发起人 黑狼
  • 开始时间 开始时间

黑狼

Unregistered / Unconfirmed
GUEST, unregistred user!
var
i:integer;
s,tmpstr:string;
begin
s:='hello#0123456';
tmpstr:='';
for i:=1 to length(s) do
begin
if s<># then
tmpstr:=tmpstr+s
else
break;
end;
form1.caption:=tmpstr;
end;
当我在for语句处设断点,用F8进行单步调试时,发现i的值竟然从13(s字符串的长度)
开始运行,也就是13,12,11..1,而运算结果还是正确的'hello',盼望各位高手给我一个
满意的答案,这是为什么?你们遇到过吗?期待!
 
不对吧?for i:=1 to length(s) then语法对吗?应该是for i:=1 to length(s) do吧?
另外,用if s<>#0 判断得出的结果是'hello#0123456'而不是hello
而且我也没有发现你所说的问题,i是从1开始到13的
 
是这样的,估计是D6对代码作了优化。
 
我测试的结果跟resun一样
D6(Pack2)+Win2k Server
 
我遇到过
不过不是这段代码
第二天就莫名其妙的正常了
 
不好意思!由于上一次上网时间太短了,没有检查一下我写的程序,所以有了上一次的错误!
这次我把它改过来了。以上,兄弟的回答不能令我满意,所以分数不能给,请原谅!
我相信只要各位调试一下自己程序中的for语句就会发现那个问题!
 
在Delphi中,
for语句中的变量在一开始时就已经确定要运行多少次了。
所以才会出现这种情况吧
 
我也遇到过这样的问题,好象是内存里的数据碎片引起的地址混乱...

我重启计算机后就恢复正常了~
 
其实这个问题没什么实际意义!所以,我决定不再问下去了。
最后我决定给每一位回答问题的同行10分。
 
delphi里有个pos函数,返回子串在字符串里的位置,不用循环就可以解决这个问题

你看一下是不是在option-Compiler-Optimization选中了?去掉他试试
 
楼上的回答我已经试过了,不过还是不行。我决定不再问了,分数虽少大家分了吧!
 
多人接受答案了。
 
后退
顶部