有关强制转换一问 |
缺席
|
like
一般會員 ![]() ![]() 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
主程序
PTest=^Test Test=record a:pchar; end; var i:integer; t:PTest; tt:ThreadList; tl:TList; begin tt:=ThreadList.create; tl=tt.locklist; for i:=0 to 1000 do begin new(t); t^.a:=Pchar(Inttostr(i)); showmessage(t^.a); //这里显示正常的数值i tl.add(t); end tt.unlocklist; end; 在线程中读取该tt列表 procedure TTestThread.Execute; var ts:TStringList; thl:Tlist; begin thl:=tt.locklist; ts:=TStringList.create; for i:=0 to 1000 do begin ts.items.add(Ptest(thl.items[0])^.a); //但在ts中的各项都是一些乱码 end; thl.unlocklist; end; 而当我用下面代码添加主程序中循环那段代码时,在线程中的ts项就显示正常 var p:pchar; i:integer; t:PTest; tt:ThreadList; tl:TList; begin tt:=ThreadList.create; tl=tt.locklist; for i:=0 to 1000 do begin GetMem(p,Length(IntToStr(i)) 1); ZeroMemory(p,Length(IntToStr(i)) 1); StrPCopy(p,IntToStr(i)); new(t); t^.a:=p; showmessage(t^.a); //这里显示正常的数值i tl.add(t); end tt.unlocklist; end; 为何在最上面那段代码中我使用了强制转换为pchar,而在线程中的ts列表项中都是一些乱码? 这里的强制转换是不是就是暂时欺骗一下骗译器,让其通过存储inttostr(i)到t^.a中, 其实在内存中还是按字符串格式存储的?也就是带有长度 计数器? 还请各位大大指点一下,谢谢! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |