addr:=stralloc(10*sizeof(char))是表示addr只能最多赋给10个字符吗,为什么我可以赋给超过10个字符呢(100分)

  • 主题发起人 主题发起人 lixiaohui
  • 开始时间 开始时间
L

lixiaohui

Unregistered / Unconfirmed
GUEST, unregistred user!
var
addr:pchar;
begin
edit1.text:='123456789012345';
addr:=stralloc(10*sizeof(char));
strpcopy(addr,edit1.text);;
strdispose(addr);
end;
为什么不提示内存空间不足的错误,这个stralloc(10*sizeof(char))是表示分配给addr10个字符的空间吗
 
StrPCopy函数不检查边界的,你这样的写法就是Windows常见的“溢出漏洞”,嘿嘿!
 
var
a:array(0..9) of char;
addr:pchar;
begin
edit1.text:='1234567890';
strpcopy(a,edit1.text);
addr:=@a;
end;
这样写有没有问题?
 
你如果不做边界检查,怎么写都有问题!你去查查溢出漏洞的原理就明白了。
 
s := ''123456789012345'

GetMem(addr, Sizeof(s)) ;
 
var
a:array(0..9) of char;
addr:pchar;
begin
edit1.text:='1234567890';
strpcopy(a,edit1.text);
addr:=stralloc(20);
addr:=@a;
showmessage(strpas(addr));
strdispose(addr);
end;
这样写还是报内存错误,为什么呢
 
后退
顶部