delphi溢出(50分)

  • 主题发起人 主题发起人 bsense
  • 开始时间 开始时间
B

bsense

Unregistered / Unconfirmed
GUEST, unregistred user!
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,windows;

var A:array[0..0] of char;
B:array[0..10] of char;

begin
{ TODO -oUser -cConsole Main : Insert code here }
B := 'abc'#0'defg';//'abcdefg'
strcopy(A,b);
messagebox(0,a,b,0);
end.

//请问大家执行结果是什么??????
 
这个是不是打错了?A:array[0..0] of char;
 
不是 ,代表单个字符的数组而已
 
黑可代码?
 
strcopy(A,b);
既然A代表单个字符的数组,那B是'abcdefg ',直接strcpy是否溢出了。
现在电脑没有装D,没有办法看一下。。。
 
1. B = "abc/0defg" 所以strcopy 只能拷贝到abc,(/0为c_str结束符)
2. strcopy 从A的地址开始写,A[0] = a; A[1] = b, A[2] = c, A[3] = /0; 写到别人的内存上了,应该不会报错,
 
按内存对齐,A B 内存分布:
A[0]
X
X
X
B[0]
B[1]
B[2]
...
所以 B = '0123456789'
strcopy( A ,B ) 得:
A[0].......0
X .......1
X .......2
X .......3
B[0].......4
B[1].......5
...
这样 把A当c_str时,A = '0123456789',B则为 456789
 
a和b的内存区发生混乱了.
报错好像不会报错.
进delphi的汇编级调试看一下内存数据就明白了,应该是b的数据被a覆盖了一点.
 
呵呵,高啊
 
接受答案了.
 
后退
顶部