procedure TForm1.Button1OnClick(Sender:TObject);
var
  p:pchar;
  str:string;
begin
  p:='hello';
  str:=string(p);
  p[0]:='q';
  ShowMessage(str+':'+p);
end;连按两次按钮显示的值不一样

解决方案 »

  1.   

    字符串的第0个字符存储的是字符串的长度,不能直接修改。如果要改变字符串的长度,用setLength(str1,10);
    按你的程序的写法,p[1]是'h',p[2]是'e',p[3]是'l',......这些是可以改的
      

  2.   

    以前讨论过,不记那贴在那了
    P := 'hello';
    P是没分配内存的野指针,是不是这样说的来的,忘了。
    它是ReadOnly的。
    如果写成:
     S := 'hello';
     P := PChar(S);
     P[0] := 'p';就可以。那谁“浦石”,他说的,我不记得那名词叫什么来了,你或者到CSDN“技术”文章那里找找,有这方面的介绍。