一个奇怪的问题,我在delphi中用循环给数组赋值,但数组的下标array[i]中的i竟然不变 (30分)

  • 主题发起人 主题发起人 阿蓉
  • 开始时间 开始时间

阿蓉

Unregistered / Unconfirmed
GUEST, unregistred user!
for m_loop:=0 to i_times do
begin
dest[pos_dest]:=buf[m_loop];//从buf向dest中赋值
pos_dest:= pos_dest + 1;//循环中,pos_dest值竟然不变
end;
//debug时发现pos_dest竟然不增加
 
试试这个
for m_loop:=0 to i_times do
begin
inc(pos_dest);
dest[pos_dest]:=buf[m_loop];//从buf向dest中赋值
end;
 
我把变量pos_dest赋给一个临时变量,i_temp
调试时竟然提示:Variable 'i_temp' inaccessible here due to optimization
 
试着改为:
for m_loop:=0 to i_times do
begin
dest[[m_loop+1]:=buf[m_loop];//从buf向dest中赋值
//pos_dest:= pos_dest + 1;//循环中,pos_dest值竟然不变
end;

我没试过。
 
控制循环的变量 m_loop 一般不要定义成全局变量
 
没人遇到过这样的问题吗?
 
给pos_dest赋个初值“0”试试
 
:),肯定没有问题。
设断点跟着走,看看每一步的值。
在这个循环里面“pos_dest:= pos_dest + 1”这句话有什么意义啊?
最后直接Pos_dest:=Pos_dest+i_times 不就得了吗?






 
dest串的信息是从buf中整理出来,buf始终从0开始,
而dest中得值是有要求的,所以使用时需要pos_dest来指示位置!
 
循环的代码是在函数中,pos_dest是函数传入的参数!
 
//附上源代码,用途按指定格式处理数据,并赋到目的串dest

function ArrCharCopy(Sour:string;SType:String;len_sour:integer;dest:PChar;pos_dest:Integer):Integer;
var
m_loop,i_times,i_temp,len_name:Integer;
s_temp:string;
buf:TArrayCharDef;//一个足够长的字符串类

begin
//16进制的string
if SType='hex' then
begin
HexToBin(Pchar(Sour),@buf,len_sour);
end
//2进制的string
else if SType='bin' then
begin
i_temp:=BinStrToInt32(Sour);
s_temp:=IntToHex(i_temp,len_sour);
HexToBin(Pchar(s_temp),@buf,len_sour);
end;
if (SType='hex') or (SType='bin') then
begin
i_times:=(len_sour div 2) - 1;
for m_loop:=0 to i_times do
begin
dest[pos_dest]:=buf[m_loop];
pos_dest:= pos_dest + 1;//问题出现处????????
end;
Result:=i_times + 1;
Exit;
end;

//asc码字符串
if SType='str' then
begin
len_name:=Length(sour);
i_times:= len_name - 1;
for m_loop := 0 to i_times do
begin
//字符串从1开始记数
dest[pos_dest]:=sour[m_loop + 1];
pos_dest:= pos_dest + 1;
end;

i_times:= len_sour - len_name - 1;
//名称结束补零
for m_loop := 0 to i_times do
begin
dest[pos_dest]:=#0;
pos_dest:= pos_dest + 1;
end;

//返回增加数据
Result:=len_sour;
Exit;
end;

//数据处理结束
end;
 
没有事啊,我这样也运行通过了啊,不过pos_dest一定要提前给定一个初值,不然在运行能通过,编绎时也
会因为(大多数整型时初值为0)但是有时地址内有初值,或是超出数组的范围,产生异常现象!
var
i_times,pos_dest,m_loop:integer;
buf,dest:array[0..20]of char;

begin
pos_dest:=0;
buf:='stringgdkfja';
i_times:=7;
for m_loop:=0 to i_times do
begin
dest[pos_dest]:=buf[m_loop];//从buf向dest中赋值
pos_dest:= pos_dest + 1;//循环中,pos_dest值竟然不变
showmessage(dest+inttostr(pos_dest));
end;
showmessage(dest);
end;

 
是呀,也不是总出这个问题,这个函数我在程序中频繁调用,只在函数嵌套调用时出现问题!
 
那就在嵌套调用的时候进去看看,一步步走,肯定会发现问题的。

 
你的 pos_dest 是个 ***** 值参 ********
如下进行:

for m_loop:=0 to i_times do
begin
dest[pos_dest+m_loop]:=buf[m_loop];//从buf向dest中赋值
end;

 
debug时显示的值不一定是正确的,看看最终的结果对不对。
 
多人接受答案了。
 
这一题的分肯定给错了!!!!!!!!!!!!!!!!!!!!
Fool!
 
后退
顶部