線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1538
推到 Plurk!
推到 Facebook!

有关强制转换一问

缺席
like
一般會員


發表:30
回覆:35
積分:18
註冊:2005-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-01-11 23:18:19 IP:220.176.xxx.xxx 訂閱
主程序
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中,
其实在内存中还是按字符串格式存储的?也就是带有长度 计数器?

还请各位大大指点一下,谢谢!

系統時間:2024-04-23 22:45:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!