关于指针的奇怪问题,希望经历过的人告诉下! (100分)

  • 主题发起人 主题发起人 pxlei
  • 开始时间 开始时间
P

pxlei

Unregistered / Unconfirmed
GUEST, unregistred user!
新年好!
在程序中,有函数如下:
procedure ByteCopy(Dest: PChar; Source: PChar; Len: Integer);
var
I: Integer;
PDest: PChar;
PSource:PChar;
begin
PDest:= Dest;
PSource:= Source;
for I:=1 to Len do
begin
PDest^:=PSource^;
Inc(PDest);
Inc(PSource);
end;
end;
定义了一个Type 如下:
type
PPacketHead = ^TPacketHead;
TPacketHead = record
TransID : Array[1..10] of Char;
MsgType : Char;
end;
当我如下访问时:
var
MsgHead : AnsiString;
pMsgHead: PPacketHead;
begin
MsgHead := Copy('WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW',1,150);
pMsgHead := PPacketHead(MsgHead);
ByteCopy(@pMsgHead^.MsgType,'0',1);
end;
执行正确!
当如下时:
var
MsgHead : AnsiString;
pMsgHead: PPacketHead;
begin
MsgHead := 'wwww';
pMsgHead := PPacketHead(MsgHead);
ByteCopy(@pMsgHead^.MsgType,'0',1);
end;
执行ByteCopy告诉非法指针错误,为什么呢?
 
MsgHead := 'wwww' w 要多于10个
 
procedure TForm1.Button2Click(Sender: TObject);
var
MsgHead : AnsiString;
pMsgHead: PPacketHead;
begin
MsgHead := pchar('wwww'); //here!
pMsgHead := PPacketHead(MsgHead);
ByteCopy(@pMsgHead^.MsgType,'0',1);
end;
 
同意 testnet
做强制类型转换时应保持转换前后的size 一置.
 
多人接受答案了。
 

Similar threads

后退
顶部