var
s:String;
ps:pChar;
begin
s := '123456789';
ps := StrAlloc(9);
move(s,ps,length(s));
showMessage(ps);
showMessage(s);
showMessage(inttostr(StrBufSize(ps)));
StrDispose(ps);
end;
这样报错。。。。showMessage(s)出错,这个函数到底怎么用的?
谢谢你的回答,我还有点不明白.s[1]这样得出来是是char,肯定是1字节所以.sizeof(s[1])好像没意义,还有ps^这样不是解引用吗,怎么会得到地址呢
追答s[1]肯定是Char,但不一定是1字节。
用以下代码验证一下:
ShowMessage(IntToStr(Sizeof(s[1])));
在Delphi 7中显示为1。在Delphi XE5中显示为2。所以,不要那么肯定。
ps是个PChar类型,即指向Char的指针,则ps^表示首字母,例如'123456789'中的 ‘1’,同时,也表示这个字符串的首地址。因此ps^传给move函数后,在代码中会取出ps所指向字符的地址,也就是整个字符串的首地址。你查一下move函数的源代码,代码如 syht2000所述,不再粘贴。