如何解決strpcopy的錯誤﹖(100分)

H

huamei

Unregistered / Unconfirmed
GUEST, unregistred user!
如何改正StrPCopy的缺點。
當string內含二進制資料時﹐如#00﹐那便會發生Copy錯誤﹐它只會復制#00之前的資料﹐就算使用StrPLCopy指定長度也一樣﹐如何解決﹖
例﹕
procedure TForm1.Button2Click(Sender: TObject);
var
 
 p:pchar;
const
 
 source : string='0123456789'+#0#0+'abc';
 // 共 15 bytes
begin
 getmem(p,50);
 strpcopy(p,source);
 
//这句不要了!!!
 try
 
 ShowMessage(p[12]);
// 應該顯示 'a' 結果沒有 --> 錯誤
 
 ShowMessage(source[13]);
// 顯示 'a' --> 正確
 finally
 
 FreeMem(P);
 
end;
end;
 
 
那就不要用pointer 类型啊
 
^_^,楼主的错误呀。
>>ShowMessage(p[12]);
// 應該顯示 'a' 結果沒有 --> 錯誤
楼主的p[12]应该是#0吧,怎么应该显示‘a'呢?
 
PChar是null-terminated string.碰到字符串中有#0,就认为字符串结束了,所以对p[12]
的访问实际上不对的,可以看到从p[0]到p[9]都正确
 
顶部