J
jhb
Unregistered / Unconfirmed
GUEST, unregistred user!
pchar 把我弄蒙了!!
下面的程序你总不会认为对吧??
var ww1char;
ww22char;
begin
getmem(ww,1);//申请了一个字符空间
strpcopy(ww,'abcdefghij');//使用了10个字符赋值
label1.caption:=strpas(ww);
//输出结果“abcdefgh”八个字符
getmem(ww2,2);//申请了2个字符空间
strpcopy(ww2,'abcdefghijklmnop');//使用了16个字符赋值
//qrstuvwxyz');
label2.caption:=strpas(ww2);
{输出结果“abcdefgh”八个字符
如果WW2申请了12个字符空间,使用16个字符赋值,
那么运行报错,“违反地址操作”
如果WW2申请了14个字符空间,使用16个字符赋值,
输出结果“abcdefghijklmnop”16个字符}
freemem(ww1);
freemem(ww2);
end;
其实这三种操作都是非法,strpcopy为何检验不出?
为何 第一,第三种非法操作不报错,竟然可以运行!!
(我还专门重新启动了机器,结果相同)
误操作引来的问题,想知道为什么,又看不了VCL原码;
想请那位大虾解释一下,
初学乍练,问题太多,不敢给太多分,望以侠义为重,
救人于水火!!
下面的程序你总不会认为对吧??
var ww1char;
ww22char;
begin
getmem(ww,1);//申请了一个字符空间
strpcopy(ww,'abcdefghij');//使用了10个字符赋值
label1.caption:=strpas(ww);
//输出结果“abcdefgh”八个字符
getmem(ww2,2);//申请了2个字符空间
strpcopy(ww2,'abcdefghijklmnop');//使用了16个字符赋值
//qrstuvwxyz');
label2.caption:=strpas(ww2);
{输出结果“abcdefgh”八个字符
如果WW2申请了12个字符空间,使用16个字符赋值,
那么运行报错,“违反地址操作”
如果WW2申请了14个字符空间,使用16个字符赋值,
输出结果“abcdefghijklmnop”16个字符}
freemem(ww1);
freemem(ww2);
end;
其实这三种操作都是非法,strpcopy为何检验不出?
为何 第一,第三种非法操作不报错,竟然可以运行!!
(我还专门重新启动了机器,结果相同)
误操作引来的问题,想知道为什么,又看不了VCL原码;
想请那位大虾解释一下,
初学乍练,问题太多,不敢给太多分,望以侠义为重,
救人于水火!!